使用MFC开发ActiveX控件2

本文介绍如何使用MFC ActiveX Control Wizard快速搭建ActiveX控件项目框架。通过示例展示了控件的主要组成部分及它们如何与宿主应用程序交互。此外还介绍了如何使用VC++自带的测试工具进行调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过"MFC ActiveX ControlWizard"向导可以非常容易的建立一个MFC ActiveX控件工程框架。按照默认的选项将建立如图1所示的工程结构:


图1 使用缺省选项建立的ActiveX控件工程结构

  其中,_DSample68和_DSample68Events这两个接口将为客户程序提供本控件的属性、方法以及可能响应的事件。全局函数DllRegisterServer()和DllUnregisterServer()分别用于控件在注册表的注册和注销,一般不需要对其进行改动。

  应用程序类从COleControlModule继承。而COleControlModule有是从CWinApp派生,提供了初始化控件模块的功能。CSample68PropPage的基类是COlePropertyPage,CDialog类的派生类,主要负责对属性页中对图形界面下用户控件属性的显示。控件类CSample68Ctrl类是这几个类中比较重要的一个类,大部分实质性工作都在该类完成,其基类为COleControl,从CWnd和CCmdTarget继承,因此能够为控件对象提供与MFC窗口对象相同的功能同时也提供了一系列事件触发函数和一个分发映射表,使ActiveX控件能够同包容器程序有效地进行交互。该类的派生类将可以在满足特定的条件时向控件的包容器发送消息或是触发事件,以通知包容器程序在控件内有一些重要的事件发生。分发映射表是其中很重要的一个部分,负责向包容器程序暴露控件提供的方法和属性。图2展示了COleControl类在控件与包容器通信中所起的作用。可以看出,ActiveX控件与其包容器之间的所有通信过程都是由COleControl来完成的:


图2 COleControl在ActiveX控件与包容器通信中的作用

  控件类对基类COleControl的OnDraw()函数进行了重载,向导生成了如下缺省代码,其作用是在控件的客户区绘制一个椭圆。在编程过程中通常要对其进行替换:

void CSample68Ctrl::OnDraw(
CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
 // TODO: Replace the following code with your own drawing code.
 pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
 pdc->Ellipse(rcBounds);
}


图3 插入ActiveX控件


图4 插入的待测试控件

  对向导生成的代码进行编译后,将产生扩展名为ocx的ActiveX控件。ActiveX控件并不能独立运行,只能在包容器程序中才能够运行。通常,为了调试方便而多使用VC++附带的ActiveX Control Test Container工具以在测试阶段对ActiveX控件进行调试。在测试工具的客户区点击鼠标右键,并选中弹出菜单的"Insert New Control…"菜单项,将弹出图3所示的对话框,左侧的列表框中列出了当前系统中所有注册的ActiveX控件,选中要测试的控件并将其插入到测试程序即可通过"Control"菜单下的各菜单项对控件的方法、属性以及事件等进行测试。在位于下方的分割视图中将跟踪显示出调试记录(参见图4)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值