用ATL和MFC来创建ActiveX控件
2010-07-25 20:46:35 来源:WEB开发网除了你可以应用到所有COM对象的一般选项,ATL ObjectWizard还提供了几个控件创建特定的选项。首先,ATL ObjectWizard让你从一个常规控件(例如一个按钮或是一个编辑控件)中进行子类划分。你可以为你的空间指定其它几个选项使得它更加不透明,给它一个更实心的背景,在运行时不可见,或者是你的控件象一个按钮那样的工作。下面是控件属性页提供的选项的一个大纲:
不透明和实心背景如果你希望使所有的包容器都不显示在控件边界之后,选择"opaque"检查框,这是控件传给它的包容器的状态信息。结果是,控件在说明它将画出它的完整矩形。选择此选项设置VIEWSTATUS_OPAQUE位以便IViewObjectExImpl::GetViewStatus向包容器指示一个不透明的控件。你可能还想选择一个实心的背景。这个选项设置VIEWSTATUS_ SOLIDBKGND 位以便GetViewStatus指示控件有一个实心的背景。
运行时不可见此选项使你的控件在运行时不可见。你可以使用不可见控件在后台完成某些操作,例如周期性的激发事件。此选项在它加入到注册表中后使得控件翻转OLEMISC_INVISIBLEATRUNTIME 位。
仿按钮此选项使你的控件象一个按钮那样工作。此时,控件将在包容器周围属性DisplayAsDefault的基础上显示为缺省的按钮。如果控件的位置标记为缺省按钮,控件将显示为一个较厚的框架。选择此选项在它加入到注册表中后使得控件翻转OLEMISC_ACTSLIKEBUTTON 。
仿标签选择此选项使得你的控件取代包容器的内部标签。这使得控件在它加入到注册表中后标记OLEMISC_ACTSLIKELABEL。
在超类基础上添加控件选择此选项使得你的控件根据一种标准window类进行子类划分。下拉列表包含了Windows定义的window类。当你选择这些类名中的一个时,向导添加一个CcontainedWindow成员变量到你的控件类中。CContainedWindow::Create将你指定的window类超类化。
规格化DC选择此选项使得你的控件在被调用来画自己时创建一个规格化的设备上下文。这标准化了控件的外观,但是效率降低了。此选项生成的代码覆盖了OnDrawAdvanced方法(而不是常规的OnDraw方法)。
可插入的选择此选项使得你的控件显示在象Microsoft Excel 和Word 这样的应用的Insert Object对话框中。你的控件就能够被插入到任何支持嵌入对象的应用中了。选择此选项在注册表项中增加了Insertable键。
仅为窗口化的选择此选项迫使你的控件窗口化,即使在支持无窗口对象的包容器中。如果你不选择此选项,你的控件将会自动的适应包容器:在支持无窗口对象的包容器中是无窗口的,在不支持无窗口对象的包容器中是有窗口的。这将使CComControlBase::m_bWindowOnly标志设置为TRUE。ATL使用此标志来决定在控件激活过程中是否要查询包容器的IoleInPlaceSiteWindowless接口。
ATL要求你预先在Stock Properties页中决定你的对象的stock属性,你可以选择Caption或者 Border Color这样的属性,或者通过点击>>按钮一次性选择所有的stock属性。这将向控件的属性映射中添加属性。
在运行ATL COM App Wizard 和 ObjectWizard之后,你就得到了一个完整的DLL,它具有一个COM DLL所必需的所有分支。此控件显示的众所周知的出口包括DllGetClassObject, DllCanUnloadNow, DllRegisterServer,和 DllUnregisterServer。另外,你得到了一个满足COM主要需求的对象——包括一个主流入接口和一个类对象。
一旦你已经使用一个向导开始了一个工程,下一步就是使控件做点有趣的事情了。通常出发点是控件的翻译代码。你立刻得到一些可视化的反馈。让我们来看一下一个基于MFC的控件的翻译是怎样发生的。
- ››创建SQL2005自动备份,定期删除的维护计划
- ››创建动态表单 javascript
- ››MFC中有多个slider时OnHScroll函数判断方法
- ››MFC自绘按钮
- ››创建基于PPTP的站点到站点VPN连接:ISA2006系列之...
- ››创建基于L2TP的站点到站点的VPN连接:ISA2006系列...
- ››创建一个Twisted Reactor TCP服务器
- ››创建Windows Mobile上兼容性好的UI 程序
- ››创建android的Service
- ››创建远古部落环境与原住民角色
- ››创建并扩展Apache Wicket Web应用
- ››创建不在任务条中显示窗口按钮的应用
更多精彩
赞助商链接