从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控件。

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]的更多相关文章

  1. 微信小程序<web-view>嵌入网页后,小程序如何和网页交互传值?

    最近开发一个项目由于小程序某些组件的限制,然后想到嵌入网页,但是遇到一个问题:网页端调取数据的时候需要 小程序传递多个参数值才能用,如何传值呢? 最初我想到是<web-view src=&quo ...

  2. 如何用ATL创建ActiveX控件

    演示截图: 代码简介或代码解析: 如何用ATL创建ActiveX控件 实现了一个ActiveX控件,它在一个圆内部有个正多边形,当用户在多变形内部单击将会使多边形的边数在当前的基础上+1,在多变形外部 ...

  3. Unity3d:使用uWebKit插件嵌入网页,网页中的flv视频无法播放

    问题描述:unity3d程序,使用uWebKit插件嵌入网页,用来播放FLV视频,有的电脑可以正常播放,有的电脑在网页中播放不了ps:网页中的播放器用的是player.swf解决方案:是由于网页中的播 ...

  4. 运用Edraw为WPF应用程序嵌入Office文档的方法总结

    具体描述了运用Edraw Office Viewer Component为WPF应用长须嵌入MS Word,Excel以及Power Point的方法. 打开Visual Studio,并创建一个新的 ...

  5. C#将exe运行程序嵌入到自己的winform窗体中

    以下例子是将Word打开,然后将它嵌入到winform窗体中,效果如下图:C将exe运行程序嵌入到自己的winform窗体中 - kingmax_res - iSport注意:该方法只适用于com的e ...

  6. ATL开发 ActiveX控件的 inf文件模板

    ATL开发 ActiveX控件的 inf文件模板    

  7. 35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n

      35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现in ...

  8. 将你的Asp.NET应用程序嵌入到SharePoint

    转:http://www.cnblogs.com/Clank/archive/2007/05/21/754073.html 为什么要将Asp.net应用程序嵌入到SharePoint?这个我们不讨论! ...

  9. 网页中&quot;IE限制网页访问脚本或ActiveX控件&quot;的提示问题的解决方法

    以前从来没有注意过"IE限制网页访问脚本或ActiveX控件"的提示问题,对于这个小细节问题,虽然感觉很别扭,但一直没考虑解决方法,今天才发现该问题可以轻松解决,以下做个小小记录. ...

随机推荐

  1. c 算牌器代码

    int main() { // 算牌器 ]; ; do { printf("请输入牌名: \n"); scanf("%2s",char_name); ; ]) ...

  2. Java——复选框:JCheckBox

    import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ItemEvent; import java. ...

  3. 去掉hint提示文字

    想要去掉EditText的hint提示文字,首先需要给EditText的父控件加上如下两个属性,使其获得焦点: android:focusable="true" android:f ...

  4. Android开发之AIDL的使用一--跨应用启动Service

    启动其他App的服务,跨进程启动服务. 与启动本应用的Service一样,使用startService(intent)方法 不同的是intent需要携带的内容不同,需要使用intent的setComp ...

  5. zabbix邮件报警脚本

    #!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText import sys mail_ ...

  6. sql 列轉行、行轉列

    PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P ...

  7. Oracle Database 12c Using duplicate standby database from active database Created Active DataGuard

    primary database db_name=zwc, db_unique_name=zwc standby database db_name=zwc, db_unique_name=standb ...

  8. webots自学笔记(二)节点与机器人建模

    原创文章,出自"博客园, _阿龙clliu" :http://www.cnblogs.com/clliu/ 上一次介绍了界面和一个简单的自由落体,然而在实际运用中,机器人的结构都是 ...

  9. MySQL中myisam与innodb的区别

    1.  myisam与innodb的5点不同 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MV ...

  10. 阿里java面试题,你能答对多少?

    答对以下这些面试题,可以淘汰掉 80 % 的求职竞争者. 1.hashcode相等两个类一定相等吗?equals呢?相反呢? 2.介绍一下集合框架? 3.hashmap hastable 底层实现什么 ...