《VC++深入详解》学习笔记 第十八章 ActiveX控件

1、什么是ActiveX控件

ActiveX控件类似一个小的应用程序,在容器中运行,比如word中插入Excel链接,点开链接后就是Excel程序

2、特征

通常采用.ocx作为后缀,也有.dll等后缀

具有方法、属性、事件三种特性

3、创建逻辑

向导创建->添加功能->生成工程->注册控件->测试调用

4、ActiveX控件类分析

创建完成的默认三个类:CTestApp,CTestCtrl和CTestPropPage

CTestApp    源于CWinApp,应用程序类表示控件本身,其中包含注册和反注册相关

CTestCtrl    源于CWnd,窗口类,其中提供了消息映射、调度映射、事件映射。调度映射用于访问控件属性和方法;事件映射用于向包含控件的容器发送事件通知;消息映射则是控件本身事件通知

CTestPropPage  源于CDialog,对话框类用于显示控件属性

CTest.idl      对外接口定义文件,其中存放控件与外部程序的通信协议,对控件的方法和属性的添加,在其下属——DTestEvents上右键添加触发添加向导添加。

5、ActiveX控件属性

ActiveX控件有四种属性:  Stock    控件标准属性  

              Ambient   控件环境属性(运行模式)

              Extended    容器处理属性

              Custom    自定义属性

添加属性后需要同时为这些属性加上配置代码,以配合作出相应改变。

属性持久性

  CTestCtrl源文件中DoPropExchange()函数提供了控件属性的持久性支持,MFC为基本类型提供了PX_开头函数,让目标属性具有持久性

  以Short为例:BOOL PX_Short(CPropExchange* pPX,LPCTSTR pszPropName,short& sValue,short sDefault);

                对象指针,由DoPropExchange提供;通过外部程序使用属性名称;属性相关类成员变量;默认值

  自定义属性需要手动通知容器,属性改变:Void BoundPropertyChanged(DISPID dispid)

通过AmbientUserMode等Ambient开头函数获取环境属性从而进行特殊配置

6、ActiveX控件方法

添加完成方法后,由于调度映射的存在,目标方法会在下列四个位置添加代码

1、CTest.idl中的主调度接口

2、CTestCtrl头文件中的声明

3、CTestCtrl源文件中的调度映射表

4、CTestCtrl源文件中定义方法体

7、ActiveX控件事件

ActiveX控件事件添加,在CTestCtrl上右键添加,添加事件

ActiveX控件有标准事件以及自定义事件两种

标准事件:

添加完成后,事件添加到-DTestEvents事件调度接口中,该接口为源接口,负责发送通知事件到容器,事件的方法由容器实现

自定义事件:

添加完成后,事件添加到-DTestEvents事件调度接口中,同时CTestCtrl源文件中定义方法体将消息发送到容器

原文地址:https://www.cnblogs.com/sepmaple/p/9510579.html