在很多场合下会存在这样的需求,那就是使用方在实际使用控件之前就想控件已经做了相应的处理比如加载的控件版本不正确等,或者需要在加载时才确定能够使用的功能集;这个时候传统的配置文件已经无法满足这种类型的需求了,往往的做法是在初始化控件的时候即做了相应的初始化,然后对自身的功能做了限制或者给使用方反馈,所以常常看到的是html标签中出现这样的写法:

  1. <OBJECT id="UsbossViewer" name="objocx"
  2. classid="clsid:6F82C754-6C31-43EA-9818-E95AD4E872FC"
  3. width="100%" height="250">
  4. <PARAM NAME="restrictedAgent" VALUE="1"/>
  5. Ming-WebReport viewer has not be installed properly.</OBJECT>

除了往常的初始化发现多了这一行:

  1. <PARAM NAME="restrictedAgent" VALUE="1"/>

这是什么呢?就是接下来要介绍的控件的自定义属性。

自定义属性与常用属性的区别在于,自定义属性未由 COleControl 类实现。自定义属性用于将 ActiveX 控件的某个状态或外观向使用该控件的程序员公开。

自定义属性有四种实现类型:“成员变量”、“带通知的成员变量”、“Get/Set 方法”和“参数化”。

  • “成员变量”实现

    这种实现将属性的状态表示为控件类中的成员变量。当对于控件而言,知道属性值何时更改并不重要时,使用“成员变量”实现。在这三种类型中,这种实现为属性创建的支持代码量最少。成员变量实现的调度映射项宏为 DISP_PROPERTY。

  • “带通知的成员变量”实现

    这种实现由一个成员变量和一个由“添加属性向导”创建的通知函数组成。属性值更改后,框架将自动调用这个通知函数。当需要在属性值更改后得到通知时,使用“带通知的成员变量”实现。由于这种实现需要调用一个函数,因此需要较长的时间。这种实现的调度映射项宏为 DISP_PROPERTY_NOTIFY。

  • “Get/Set 方法”实现

    这种实现由控件类中的一对成员函数组成。当控件用户请求属性的当前值时“Get/Set 方法”实现自动调用 Get 成员函数,而当控件用户请求更改属性值时自动调用 Set 成员函数。当需要在运行时计算属性值、在更改实际属性之前验证控件用户传递的值或实现只读或只写属性类型时,使用这种实现。这种实现的调度映射项宏为DISP_PROPERTY_EX。

  • “参数化”实现

    “添加属性向导”支持参数化实现。参数化属性(有时称为属性数组)可用于通过控件的单个属性访问一组值。这种实现的调度映射项宏为 DISP_PROPERTY_PARAM

下面介绍最常用的成员变量的实现,至于其它三种方式在以后会做介绍:

(1)首先加载控件的项目

(2)在“类视图”中展开控件的库节点

(3)右击控件的接口节点(库节点的第二个节点)打开快捷菜单

(4)单击“添加属性”进入属性向导

命名属性名,选择类型,此外的名字会自动生成

(5)单击完成,这时会在Idl文件自动生成相应的属性

同时自动生成相应的成员变量

(6)这个时候就可以使用这个变量了,在按照文章开头的方式传入值,咦~~你会发现初始化的属性并没有传入到该成员变量中,并没有达到预期的效果,为什么呢?

原因很简单,就是没有做属性的持久化,关于这个关键的详细解释这里就不做展开了,你要做的是是在Ctrl文件中DoPropExchange方法调用PX_方法:

  1. void CCCEACtrl::DoPropExchange(CPropExchange* pPX)
  2. {
  3. ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
  4. COleControl::DoPropExchange(pPX);
  5. // TODO: 为每个持久的自定义属性调用 PX_ 函数。
  6. PX_String(pPX, "restrictedAgent", m_restrictedAgent, "0");
  7. PX_String(pPX, "GetLoginInterfaceID", m_GetLoginInterfaceID, "0");
  8. }

这时最基础的属性框架已经OK了,该属性可以正常地使用了。

【VS开发】ActiveX控件如何定制属性?的更多相关文章

  1. 用C#开发ActiveX控件,并使用web调用

    入职差不多两个月了,由学生慢慢向职场人做转变,也慢慢的积累知识,不断的更新自己.最近的一个项目里边,涉及到的一些问题,因为SDK提供的只是winform才能使用了,但是有需求咱们必须得完成啊,所以涉及 ...

  2. 使用C#开发ActiveX控件(新)

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  3. [转]C#开发ActiveX控件,.NET开发OCX控件案例

    引自:百度   http://hi.baidu.com/yanzuoguang/blog/item/fe11974edf52873aaec3ab42.html 讲下什么是ActiveX控件,到底有什么 ...

  4. 使用C#开发ActiveX控件(新) 转 http://www.cnblogs.com/yilin/p/csharp-activex.html

    前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是 ...

  5. [转] 使用C#开发ActiveX控件

    双魂人生 原文 使用C#开发ActiveX控件 ActiveX 是一个开放的集成平台,为开发人员.用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内 ...

  6. 使用C#开发ActiveX控件 11

    C#开发ActiveX控件   ActiveX 是一个开放的集成平台,为开发人员.用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内容的方法. 使用 ...

  7. C#开发ActiveX控件

    昨天写了篇博客<Winform 程序嵌入WPF程序 并发送消息>,没有说明为什么要嵌入WPF程序,那么今天就来唠叨唠叨其中的一个使用场景,开发ActiveX控件 首先,新建一个类库工程Hu ...

  8. 使用C#开发ActiveX控件

    使用C#开发ActiveX控件(新) 前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动 ...

  9. [转]使用C#开发ActiveX控件全攻略

    前言: 这段时间因为工作的需要,研究了一下ActiveX控件.总结如下: 先说说ActiveX的基本概念. 根据微软权威的软件开发指南MSDN(Microsoft Developer Network) ...

随机推荐

  1. 字符串格式化-String类format方法

    常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象. format()方法有两种重载形式. 显示不同转换符实现不同数据类型到字符串的转换,如图所示: 测 ...

  2. JAVA笔记8-对象转型casting

    1.规则 (1)基类(父类)的引用类型变量可以指向其子类对象:(向上转型) (2)基类的引用不可以访问其子类对象新增加的成员(属性和方法): (3)可以使用“引用变量 instanceof 类名”来判 ...

  3. 使用Eclipse Memory Analyzer Tool(MAT)分析故障

    Eclipse Memory Analyzer Tool(MAT)是一个强大的基于Eclipse的内存分析工具,可以帮助我们找到内存泄露,减少内存消耗. 工作中经常会遇到一些内存溢出.内存泄露等问题, ...

  4. node 的fs.state 获取文件信息

    1. fs.stat()可以获取文件的信息,用法如下: const fs = require('fs'); fs.stat('./book.js',(err,stats)=>{ if(err) ...

  5. 上传文件夹 vue

    ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...

  6. Angular 英雄示例教程

    英雄指南教程(Tour of Heroes)涵盖了 Angular 的基本知识. 在本教程中,你将构建一个应用,来帮助人事代理机构来管理一群英雄. 这个入门级 app 包含很多数据驱动的应用所需的特性 ...

  7. 使用word2vec对中文维基百科数据进行处理

    一.下载中文维基百科数据https://dumps.wikimedia.org/zhwiki/并使用gensim中的wikicorpus解析提取xml中的内容 二.利用opencc繁体转简体 三.利用 ...

  8. Sonar页面Author页面展示

    文主要记录通过Jenkins集成git .svn .sonarqube,获取源码后自动构建进行sonar scanner代码审查,并分析在sonar能够展示Author的原因. 一.Sonar通过je ...

  9. idea中JSP页面不能访问静态资源(图片,js,css)

    必须配置SpringMvc对访问静态资源的支持,idea默认就是在main/webapp 下的文件路径,要在web-info同级的resource文件下放置,JSP中 ${pageContext.re ...

  10. JS框架_(JQuery.js)图片相册掀开切换效果

    百度云盘 传送门 密码:y0dk 图片掀开切换效果: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...