zoukankan      html  css  js  c++  java
  • 把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

    从VS2010开始ATL ActiveX支持IObjectSafety接口,所以用VS2010来编写,新建一个ATL项目


    向导的第一页没什么东西,直接下一步,选项可以根据具体需求调整

    点“完成”,切换到类视图,新建一个“ATL控件”类

    点击“添加”后出现向导,这里我输入MainWindow,因为这是作为一个窗口容器的标准窗体(不是ActiveX容器)

    点击“下一步”,如果需要网页接收ActiveX的事件则在“连接点”打钩,“已授权”未知(应该和数字签名有关系)

    点击“下一步”,让控件支持IObjectSafety接口,具体效果未知

    点击“下一步”,重点,这里配置一个窗口容器,由于没有Window或者Dialog,只好选一个Static,反正是需要一个干净的窗口,在这个窗口里来一个子窗口就可以界面编程了

    直接点击“完成”,VS会提示一个资源外部修改的警告,点“是”

    到这里就已经添加好了一个具有标准窗体的ActiveX控件(有句柄的),接下来添加属性支持,支持从网页接受参数。添加一个属性,注意这里的属性不是成员变量。

    这里我简单添加一个数值型的USHORT,对于字符串则是BSTR

    点击“下一步”,VS会自动分配此属性的ID,不用修改什么,点击“完成”,可以看到此属性。

    接下来使此控件支持固有属性,以便网页能够传递参数进来

    给CMainWindow添加基类IPersistPropertyBagImpl

    给CMainWindow添加接口映射IPersistPropertyBag

    映射固有属性

    至此,网页可以传递参数给ActiveX了,但传递的东西在哪里?这就需要自己存储了

    转到MainWindow.cpp可以看到

    每当网页设置或获取属性时都会触发函数,so,新声明一个成员变量用来存储

    至此,参数传递搞定,接下来让ActiveX编程转变为界面编程

    在“资源视图”添加一个Dialog,Border设为None,Style设为Child

    新建cpp和h文件各一个,用来处理此Dialog的事情,消息处理函数如图

    然后,当控件初始化的时候建立此窗口

    需要先记录一下当前模块句柄,修改下DllMain,在dllmain.cpp里

    然后在MainWindow.h里引入此变量,在靠前的地方引入

    extern HMODULE g_hModule;

    接下来在成员函数OnCreate添加代码

    哦,最后需要处理一下窗口,让Dialog完全填充掉Static

    编译,修改工程目录下的htm文件

    用IE访问此网页,注意编译的时候VS需要管理员权限才能自动注册控件,否则需要手动注册

    传递的参数就不再演示了,自己可以在put_Port里添加提示框来验证。

    后续添加控件属性的话只需要添加属性,添加固有映射,添加成员变量即可。

    控件也可以添加接口给网页调用,网上例子很多,不说了。

    至此,程序可以接收网页传递来的参数,可以接受网页的调用,并像编写普通程序一样来编写ActiveX控件。


     


     

  • 相关阅读:
    自定义滚动条原理
    多个轮播图或者选项卡显示在一个页面是,使用代码重用
    浮动与清除
    cni 添加网络 流程分析
    《MapReduce: Simplified Data Processing on Large Cluster 》翻译
    OpenStack overview 笔记
    docker containerd shim分析
    docker containerd 中的create 容器操作
    MIT jos 6.828 Fall 2014 训练记录(lab 6)
    docker containerd中的容器操作
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3341714.html
Copyright © 2011-2022 走看看