zoukankan      html  css  js  c++  java
  • 《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源文件中定义方法体将消息发送到容器

  • 相关阅读:
    delphi中定义了一个过程,是无参的,可是调试中却出现‘too many actual parameters’一般是什么原因
    delphi 实现接口 Unsatisfied forward or external declaration
    安装-[Microsoft] [ODBC驱动程序管理器]找不到数据源名称,未指定默认驱动程序
    delphi中常见错误提示说明
    layui与java后台交互
    delphi中报Left side cannot be assigned to错
    Python快速排序算法
    ubuntu server更改语言为中文
    Ubuntu开启root用户ssh远程密码登录
    错误 Error: electron@13.1.8 postinstall: `node install.js` 的解决
  • 原文地址:https://www.cnblogs.com/sepmaple/p/9510579.html
Copyright © 2011-2022 走看看