《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源文件中定义方法体将消息发送到容器