《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源文件中定义方法体将消息发送到容器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具