WEB开发网
开发学院软件开发VC 用ATL和MFC来创建ActiveX控件 阅读

用ATL和MFC来创建ActiveX控件

 2010-07-25 20:46:35 来源:WEB开发网   
核心提示:用MFC开发一个控件用MFC开发一个ActiveX控件涉及到在Visual Studio®.中使用ActiveX ControlWizard,为了开始一个新的控件,用ATL和MFC来创建ActiveX控件(3),从File菜单中选择New,然后从工程类型列表中选择MFC ActiveX控件Wizard,但是,在

用MFC开发一个控件

用MFC开发一个ActiveX控件涉及到在Visual Studio®.中使用ActiveX ControlWizard。为了开始一个新的控件,从File菜单中选择New,然后从工程类型列表中选择MFC ActiveX控件Wizard。首先,ControlWizard要求你决定在DLL中包括多少个控件。接着你就可以选择你打算怎样实现你的控件。

ControlWizard提供的第一批选项总体上适用于控件的DLL。它们包括了许可支持、源码注释和在线帮助。选择许可使得ControlWizard使用BEGIN_OLEFACTORY和END_OLEFACTORY (而非DECLARE__OLECREATE).。BEGIN_OLEFACTORY 和 END_OLEFACTORY宏覆盖了VerifyUserLicense和GetLicenseKey,因而为你的控件提供许可支持。请求ControlWizard包括注释将所有的TODO注释加入代码中。最后,请求ControlWizard包括在线帮助将为DLL创建样板HELP文件源代码。

一旦你通过了第一个对话框,ControlWizard就显示一个对话框用来配置DLL中的控件。这些配置选择包括使控件在运行时可见的选项,使得控件在可见时激活的选项,使得对象可以被插入的选项,给控件一个About框的选项,使得控件像一个简单的框架控件那样行为的选项。图4解释了不同的选项是如何影响ControlWizard生成的代码的。

ControlWizard还有一个将控件实现为一个标准的Windows控件的选项,就像一个编辑框或者一个按钮。这是一个有趣的选项。例如,如果你选择按照一个按钮将你的控件分成子类,控件的窗口实际上是一个按钮。此时,PreCreateWindow拦截控件的窗口创建,当创建控件的窗口时使用BUTTON窗口类。ControlWizard使你可以选择一些高级的选项,包括无窗口的激活,使你的控件具有完整的设备上下文,实现无抖动的激活,使你的控件在非激活状态也接受鼠标消息,使你的控件异步的加载自己的属性。这里有一个每个选项如何影响ControlWizard生成的代码的纲要。

无窗口的激活此选项覆盖COleControl::GetControlFlags,将windowlessActivate标志附加到控件标志中。一旦使此选项有效,包容器就将输入消息送交到控件的IoleInPlaceObjectWindowless接口。此接口ColeControl的实现通过你的消息映射分发消息。你就能通过简单的添加相应的入口到消息映射表,像处理一般windows消息那样处理消息了。

无省略的设备上下文选择了此选项覆盖COleControl::GetControlFlags,关闭clipPaintDC位,从而在ColeControl的 OnPaint函数中去掉了IntersectClipRect调用。如果你确定你的控件并不需要在客户区外部绘图,这个选项就有用了,因为使对IntersectClipRect的调用失效后,有一个明显的速度的提高。

无抖动的激活选择此选项覆盖COleControl::GetControlFlags,将缺省控件标志与noFlickerActivate逐位相或。控件在激活的时候检查此标志以阻止控件在激活和非激活状态转换时被重画。如果你的控件在激活和非激活状态外观一样,那么这个选项就是有用的。

非激活时的鼠标指针通知这个选项覆盖COleControl::GetControlFlags,附加了pointerInactive位。IpointerInactive接口使得一个对象大多数时间保持非激活,然而仍然参加与鼠标的某些操作的交互,例如拖放。

优化的绘图码 这个选项覆盖COleControl::GetControlFlags,打开canOptimizeDraw位,具有优化绘图代码的控件检查这个标志(通过COleControl’的IsOptimizedDraw函数)来确定控件是否需要在完成绘画后将旧的对象复原回设备上下文。

异步加载属性此选项将stock ReadyState属性和stock ReadyStateChange事件加入到控件中去。这将使得控件异步的加载其属性。例如,一个加载大量的数据作为其属性之一的控件会需要很长的时间来加载,而锁住了控件。这个stock属性和事件使得此控件立刻开始加载过程。包容器使用此事件和属性判断控件何时完成加载。

当ControlWizard完成这些事情后,你就得到了编译到一个包含此控件的DLL的源代码(扩展名是.OLX)。由wizard产生的源代码包括一个从ColeControlModule(它是从CwinApp中派生的)中派生的类。这个类包含整个控件模块的初始化代码。接着,wizard为基于ColeControl的表示每个控件的类生成源代码。最后,wizard生成一些ODL代码用来建立类型信息。

一旦wizard产生了控件DLL,你就面临完善这个控件的任务了。这意味着添加渲染代码,开发一个引入接口(方法和属性),rigging up属性页,展示某些事件。但是,在我向你说明所有这些都是如何工作之前,我们先来看一下使用ATL创建一个控件都需要什么。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:ATL MFC 创建

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接