若是我但愿个人ActiveX插件自己就以Dialog或者FormView窗体的形式呈现,那该如何处理呢?本文就总结一下这个,而且附带总结一下vs2008下以及网页下如何调试ActiveX,做为上述系列文章的补充。html
1、在ActiveX中使用Dialogdocker
首先建立一个ActiveX工程,工程名假设为:MyActiveX浏览器
2. 建立一个对话框资源(Dialog),并关联一个类(CMyDialog)。检查一下对话框资源的配置,推荐配置:style:child, border:dialog frame, visible:ture, control:ture安全
3. 对ActiveX控制类(CMyActiveXCtrl)作以下操做:微信
(1) 在CMyActiveXCtrl类的定义中,添加一个成员变量:CMyDialog m_myDlg;函数
(2) 为CMyActiveXCtrl类添加OnCreate消息响应:工具
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
(3)在上述 OnCreate 消息响应函数中,添加以下代码:学习
m_myDlg.Create(IDD_MYDLG,this); //IDD_MYDLG为对话框资源ID
(4)在 CMyActiveXCtrl类 的 OnDraw 函数中,添加以下代码测试
m_myDlg.MoveWindow(rcBounds, TRUE);
4. 到此,基本工做完成。能够在 Active X control test Container 中进行测试了。this
2、在ActiveX中使用FormView
在ActiveX中使用FormView跟使用Dialog大致相似,可是FormView与Dialog有不少不一样的地方,所以有些须要特别注意。
同上,首先建立一个ActiveX工程,工程名假设为:MyActiveX
2. 建立一个FormView资源,并关联一个派生于CFormView的类(CMyForm)。检查一下对话框资源的配置,推荐配置:style:child, border:none, visible:ture, control:ture
3. 在CMyForm类的定义里面添加一项友元声明(friend class CmyActiveXCtrl;)由于FromView类的Create函数是protected型,因此若是想手动调用FromView派生类的Create函数的话,要么加友元声明,要么,在派生类CMyForm的定义中,重载Create方法,并设置为 public型。
4. 对ActiveX控制类(CMyActiveXCtrl)作以下操做:
(1) 在CMyActiveXCtrl类的定义中,添加一个成员变量:CMyForm * p_myFrom; // 注意,这里要使用指针,FormView资源必须动态建立,若是这里直接使用对象,而不是用指针,则在释放ActiveX控件的时候,会出现 Debug Assertion Fail 的错误。
(2) 为CMyActiveXCtrl类添加OnCreate消息响应
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
(3) 在上述 OnCreate 消息响应函数中,添加以下代码:
p_myForm = new CMyForm(); p_myForm->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL);
(4)在 CMyActiveXCtrl类 的 OnDraw 函数中,添加以下代码:
p_myForm->MoveWindow(rcBounds,TRUE);
5. 到此,基本工做完成。能够在 Active X control test container 中进行测试了。
3、 在win7 + vs2008下调试ActiveX控件
在vs2008下,没有自带 Active X control test container,须要本身编译,这个过程可能会遇到一些问题,我把解决方案(部分是网上搜集的)写在下面,以供你们参考。
在编ActiveX控件时,能够用到Active X control test container来测试activex控件,这在Visual Studio 6里面是很方便查找的,工具菜单下面就有。可是在Visual Studio 2008 里面TSTCON32.exe这个文件却消失了。那它是没了吗,不是的。而是微软把它放在了例子程序里面,须要本身编译。详细目录:好比我装在C盘里面,VC的例子在 “C:\Program Files\Microsoft Visual Studio 9.0\Samples\2052\AllVCLanguageSamples.zip”,把这个文件解压缩之后,在下面的目录能够找到TSTCON32.exe的源代码:“C++\MFC\ole\TstCon”,本身编译就能够了。
这里特别注意,因为默认的是Win32的解决方案平台,因此在编译TCProps和TstCon要将编译平台选为Win32,而不是默认的Itanium平台。
OK拿去编译,注意得先编译TCProps,而后再编译TstCon。
若是是在win7下,运行测试时,则还会出现错误,弹出“并行运行错误”的对话框,【解决方法】:
(1)分别在TstCon和TCProps两个Project的StdAfx.h文件加入 #define _WIN32_WINNT 0x0600.
(2)原始TstCon工程没有相应语句之间添加便可;原始TCProps工程将#define _WIN32_WINNT 0x0400改成#define _WIN32_WINNT 0x0600便可。
(3)分别对各个工程进行:选中对应工程-->点击右键,选择 Properties-->Configuration Properties-->Linker-->Manifest File-->选中Enable User Account Control(UAC):改成No,原始为Yes,点击,应用,肯定便可。需Release、Debug下各配置一次。
另外,在vs2008下在编译MyActiveX工程的时候,可能会出现以下错误:
Project : error PRJ0050: Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions.
【解决方法】:
(1) 在工程配置-> Linker -> General -> Per-User Redirection 选择No
(2) 使用管理员权限打开vs2008(vs exe图标右键->以管理员身份运行)
(3) 若是问题仍是没有解决的话,请注意查看你的ActiveX工程所依赖的库文件是否都在.ocx文件所在的目录下,若是缺乏所依赖的库文件,也会报这个错误。
4、在网页中测试ActiveX
首先,安装 ActiveX Control Pad 软件,这个软件是微软提供的专门用来动态生成测试ActiveX的html页面代码的工具,用这个工具,能够很方便地生成须要的html代码或者网页。
而后,执行以下步骤:
1. 将本身的myActiveX工程设置为release,生成一个release版本(必须),不然使用ActiveX Control Pad没法获得有效的插件信息。(提示,改为release版后,注意工程配置,好比依赖的库,都要与debug一致。)
2. 打开ActiveX Control Pad,选择菜单File -> New HTML,建立一个HTML页面。
3. 从ActiveX Control Pad选择菜单Edit -> Insert ActiveX Control ....,而后会弹出一个消息框。从消息框的列表中选择相应的ActiveX Control,点击OK便可将ActiveX Control插入到HTML页面。(能够在弹出的框中调整相关参数,好比控件大小等)
4. 在本机经过IE浏览器打开生成的HTML便可看到ActiveX Control显示在HTML页面中。(注意,有的浏览器可能会禁止加载ActiveX控件,检查一下相关的安全配置状况)
结束语
免费学习更多精品课程,登陆乐搏学院官网http://h.learnbo.cn/
或关注咱们的官方微博微信,还有更多惊喜哦~
本文出自 “Jhuster的专栏” 博客,请务必保留此出处http://ticktick.blog.51cto.com/823160/610784