把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

时间:2023-02-26 22:11:37

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

给CMainWindow添加基类IPersistPropertyBagImpl

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

给CMainWindow添加接口映射IPersistPropertyBag

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

映射固有属性

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

转到MainWindow.cpp可以看到

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

extern HMODULE g_hModule;

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]

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

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

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

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

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

  1. Unity中嵌入网页插件Embedded Browser2.1.0

    背景 最近刚换了工作,新公司不是做手游的,一开始有点抵触,总觉得不是做游戏自己就是跨行了,认为自己不对口,但是慢慢发现在这可以学的东西面很广,所以感觉又到了打怪升级的时候了,老子就在这进阶了. 一进公 ...

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

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

  3. C&num;编写ActiveX控件

    用C#编写ActiveX控件 http://www.cnblogs.com/homer/archive/2005/01/04/86473.html http://www.cnblogs.com/hom ...

  4. 用C&num;编写ActiveX控件,开发浏览器控件,注册ActiveX 控件

    用C#编写ActiveX控件,开发浏览器控件,注册ActiveX 控件用C#编写ActiveX控件 开发浏览器控件这是本控件开发完成后的一个简单应用.我们可以利用它以本地文件夹为单位来批量更新服务器的 ...

  5. 如何用ATL创建ActiveX控件

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

  6. Delphi 编写ActiveX控件(OCX控件)的知识和样例(有详细步骤)

    一.ActiveX应用情况简介: ActiveX控件也就是一般所说的OCX控件,它是 ActiveX技术的一部分.ActiveX是微软公司推出的基于组件对象模型COM的技术,包括对Windows 32 ...

  7. 用C&num;编写ActiveX控件

    http://www.cnblogs.com/homer/archive/2005/01/04/86473.html http://www.cnblogs.com/homer/archive/2005 ...

  8. Unity3d&colon;使用uWebKit插件嵌入网页,网页中的flv视频无法播放

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

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

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

随机推荐

  1. 代码设置Shape和Selector

    开发中经常需要使用Shape和Selector,如果每个都用xml设置的话,会占用apk大小,同时命名多了也会混乱,使用代码来设置会方便很多. 需要用到2个类:GradientDrawable和Sta ...

  2. QCustomPlot 使用整理

    QCustomPlot 是一个比较小的 QT 图表插件.使用时,我们在程序中写完相关调用的代码后,只需将 QCunstomPlot.cpp 和 QCustomPlot.h 两个文件加入工程,正常编译即 ...

  3. TCP连接的状态与关闭方式及其对Server与Client的影响

    TCP连接的状态与关闭方式及其对Server与Client的影响 1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用. ...

  4. POJ 3321 DFS序&plus;线段树

    单点修改树中某个节点,查询子树的性质.DFS序 子树序列一定在父节点的DFS序列之内,所以可以用线段树维护. 1: /* 2: DFS序 +线段树 3: */ 4:   5: #include &lt ...

  5. 关于Eclipse的常用快捷键

    最近用到了一些以前开发中没有用到的Eclipse中的快捷键,现在总结如下: Ctrl+Shift+G 全局 工作区中的引用 使用的图解: 在所选定的类上,按下Ctrl+Shift+G在Search的T ...

  6. 比之前那个版本更简单的C语言实现的比较大小

    之前那个是输入一堆数据,找最大那个,这次是更简单的版本,求两个数的最大值. #include "stdafx.h" #include <stdio.h> int Get ...

  7. &lbrack;原&rsqb;C&num;与非托管——封送和自动封送

    之前说到了如何从C函数声明通过简单的查找替换生成一份C#的静态引用声明(C#与非托管——初体验),因为只是简单说明,所以全部采用的是基础类型匹配和自动封送.自动封送虽然能省去我们不少编码时间,但如果不 ...

  8. terraform基本使用

    安装terraform 下载terraform最新版本: wget https://releases.hashicorp.com/terraform/0.11.5/terraform_0.11.5_l ...

  9. MyBatis的好处及常见问题

    好处 MyBatis持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置 ...

  10. linux下自定义dubbo的shell脚本