前言、废话和源码下载位置
最近做一个项目需要网页打开的ATL控件作为依托,显示三维内容。网页对控件可以调用函数,并且传送信息。控件也可以给网页发送消息。
我不懂ATL控件,完全初学,弄了很久。写个blog记录一下。
源码工程下载:
AtlTest1501_V1 打包链接
一、工作环境
- Windows7 64位 旗舰版
- VS2013
- IE 10(有的IE11不可用还需要修改)
二、建立ATL控件
- “以管理员身份运行”VS2013。由于ATL控件需要注册,VS向导生成的项目在编译后,自动注册,所以需要用管理员身份,否则编译会失败,提示注册问题。
- 通过VS向导新建ATL项目。项目名称定为AtlTest1501.选项如下图:
点击完成。 - 在项目中添加ATL控件。
右键添加类,选择ATL控件。填写类名称为“AtlControl”。
选择支持“连接点”。
支持“IObjectSafety”接口。
添加控件基于: “Stactic”。
支持 “Auto Size”。
点击完成,添加好了ATL控件。 - 配置调试,运行看看。
项目属性对话框“调试”中:
- “命令”输入:C:\Program Files\Internet Explorer\iexplore.exe
- “命令参数”输入:$(ProjectDir)AtlControl.htm
- “工作目录”输入::
(SolutionDir) (Configuration)
点击确定,编译运行。
在IE网页中,“允许阻止的内容”,看到一个灰白色的ATL控件。
- 跟踪调试。
- 在CAtlControl类的OnCreate函数中打断点。
- 调试的时候,在调试菜单中,选择“附加到进程”,刷新IE网页,点击“允许阻止的内容”。就可以跟踪调试了。
- 注意:我是64位的机器,由于ATL只有32位的。需要确认注册表信息是否兼容32位的IE。展开至 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main,在右侧列表中找到 TabProcGrowth 设定为非 0,如果这个数值型态是 DWORD,那可以设定为 1,如果型态是字串,可以设定为 medium。如果没有这个项,就新建一个。百度一下有很多说这个的。原来在IE7的时候,还可以不用附加到进程直接就可以调试运行,在IE10中没有找到。刚刚查了一个《如何在Win7/Win8中打开32位版IE10和IE11》
试一下,可以在网页中控件灰白色的ATL控件,且断点可以打断。本文内容就完成了。
下一篇写,网页调用ATL控件,ATL控件向网页返回事件。
参考文章
最近查询过的文章很多。都不太记得了。这里记录了一些当时认为有用的。
ATL建立ActiveX控件样例(入门级)
- 配置项目属性:用于在IE中调试ATL控件
- 给控件创建窗口,在OnDraw()函数中显示,在OnCreate()及OnSize()函数中创建和显示的代码。
- 链接如下:
http://blog.csdn.net/shangzhi6321/article/details/5091459
其他:给控件加上安全描述 可以去掉IE每次“允许显示内容”的对话框询问。
http://mochou123456.blog.163.com/blog/static/46057646201152111542393/
DLL+ ActiveX控件+WEB页面调用例子
- 这个解决了我那个的函数调用的毛病。需要添加一些东西。
- 链接如下
http://blog.chinaunix.net/uid-10021887-id-2971827.html
把程序嵌入网页之ATL编写ActiveX[标准窗口+接受参数]
- 用于VS2013;
- 讲解清晰入门用,我这个试用,都怀疑是物超的博客,看了半天不是。
- 很清晰有时间看看,实现一下。
- 第一行是我传输函数不能的关键。
- 链接如下:
http://blog.csdn.net/sidyhe/article/details/12048553