https://msdn.microsoft.com/zh-cn/library/cc451389(v=vs.71).aspx

----------------------------------------------

下面步骤为给控件添加属性的标准步骤。其中如果涉及到COM多线程编程的使用全局变量会造成多线程之间共享全局变量的效果,但是也会出现相应的问题,比如

启动多个页面也就是启动了多个activex控件的时候如果每个控件都在使用一个全局变量作为标识进行判断线程是否继续运行。

如果其中一个页面(也就是activex) 把该全局变量置成了false的话,会影响其他线程运行。

不过使用全局变量也有一定的好处,就是可以防止多开。在activex启动的时候可以判断该全局变量然后决定是否运行另一个;

上面的多线程使用全局变量有影响,解决方案就是使用类的私有变量,也就是给类添加成员变量;

然后添加get方法 注意参数为引用。

====================================================================

步骤 3:向控件添加属性

Visual Studio .NET 2003
 

IPolyCtl 是包含控件的自定义方法和属性的接口,您将在其中添加属性。

使用“添加属性向导”添加属性

  1. 在“类视图”中右击 IPolyCtl(展开“Polygon”分支找到它)。
  2. 在快捷菜单上单击“添加”,然后单击“添加属性”。

    “添加属性向导”随即出现。

  3. 在属性类型的下拉列表中,选择“short”。
  4. 键入 Sides 作为属性名:

  5. 单击“完成”完成属性的添加。

将属性添加到接口时,MIDL(编译 .idl 文件的程序)定义检索其值的 Get 方法和设置新值的 Put 方法。这些方法的命名方式是在属性名的前面加上 put_ 和 get_

“添加属性向导”将必需的行添加到 .idl 文件。它还将 Get 和 Put 函数原型添加到 PolyCtl.h 中的类定义,并将一个空实现添加到 PolyCtl.cpp。您可以通过打开 PolyCtl.cpp 并查找函数 get_Sides 和 put_Sides 来进行检查。

虽然现在有了设置和检索属性的主干函数,但需要有地方存储属性。您将创建存储属性的变量,并相应地更新函数。

创建存储属性的变量并更新 put 和 get 方法

  1. 从解决方案资源管理器中,打开 PolyCtl.h 并在类定义末尾的 m_clrFillColor 定义后添加下行:

     
     
    short m_nSides;
    
  2. 设置 m_nSides 的默认值。向 PolyCtl.h 中的构造函数添加一行,使默认形状成为三角形:
     
     
    CPolyCtl()
    {
    m_nSides = 3;
    }
  3. 实现 Get 和 Put 方法。get_Sides 和 put_Sides 函数声明已经添加到 PolyCtl.h。将以下代码添加到 PolyCtl.cpp 以完成这两个方法:
     
     
    STDMETHODIMP CPolyCtl::get_Sides(short *pVal)
    {
    *pVal = m_nSides;
    return S_OK;
    }
    STDMETHODIMP CPolyCtl::put_Sides(short newVal)
    {
    if (newVal > 2 && newVal < 101)
    {
    m_nSides = newVal;
    return S_OK;
    }
    else
    return Error(_T("Shape must have between 3 and 100 sides"));
    }

get_Sides 方法通过 pVal 指针返回 Sides 属性的当前值。在 put_Sides 方法中,代码确保用户将 Sides 属性设置为可接受的值。最小值必须是 2,而且由于对每个边都要使用一系列点,100 是合理的最大值限制。

您现在有了一个名为 Sides 的属性。下一步,您将更改绘图代码以便使用它。

ATL向控件添加私有属性-成员变量的更多相关文章

  1. 如何给ActiveX控件添加“事件”“属性”“标准事件”“自定义事件”等一些相关操作

    上一篇小编带大家熟悉了一下ActiveX的建立以及相关的概念,(http://blog.csdn.net/u014028070/article/details/38424611) 本文介绍下如何给控件 ...

  2. WPF系列 —— 控件添加依赖属性(转)

    WPF系列 —— 控件添加依赖属性 依赖属性的概念,用途 ,如何新建与使用.本文用做一个自定义TimePicker控件来演示WPF的依赖属性的简单应用. 先上TimePicker的一个效果图. 概念 ...

  3. 【C#】使用IExtenderProvider为控件添加扩展属性,像ToolTip那样

    申明: - 本文适用于WinForm开发 - 文中的“控件”一词是广义上的说法,泛指包括ToolStripItem.MenuItem在内单个界面元素,并不特指继承自Control类的狭义控件 用过To ...

  4. WPF系列 —— 控件添加依赖属性

    依赖属性的概念,用途 ,如何新建与使用.本文用做一个自定义TimePicker控件来演示WPF的依赖属性的简单应用. 先上TimePicker的一个效果图. 概念 和 用途:依赖属性是对传统.net ...

  5. WPF对某控件添加右键属性

    代码创建右键属性 ContextMenu cm = new ContextMenu(); MenuItem mi = new MenuItem(); mi.Header = "打开此文件所有 ...

  6. 【VS开发】ActiveX控件如何定制属性?

    在很多场合下会存在这样的需求,那就是使用方在实际使用控件之前就想控件已经做了相应的处理比如加载的控件版本不正确等,或者需要在加载时才确定能够使用的功能集:这个时候传统的配置文件已经无法满足这种类型的需 ...

  7. 在C#中使用属性控件添加属性窗口

    转自原文 在C#中使用属性控件添加属性窗口 第一步,创建在应用程序中将要展现的字段属性为public公有属性.其中,所有的属性必须有get和set的方法(如果不设置get方法,则要显示的属性不会显示在 ...

  8. m_Orchestrate learning system---二十六、动态给封装好的控件添加属性

    m_Orchestrate learning system---二十六.动态给封装好的控件添加属性 一.总结 一句话总结:比如我现在封装好了ueditor控件,我外部调用这个控件,因为要写数据到数据库 ...

  9. repeater中后台动态为控件添加属性

    在此贴出repeater中的ItemDataBound事件中的代码: private void ItemDataBound(object sender, RepeaterItemEventArgs e ...

随机推荐

  1. New Concept English three (35)

    27 55 The word justice is usually associated with courts of law. We might say that justice has been ...

  2. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space(Java堆空间内存溢出)解决方法

    http://hi.baidu.com/619195553dream/blog/item/be9f12adc1b5a3e71f17a2e9.html问题描述Exception in thread &q ...

  3. CentOS下安装w3m,及w3m的使用

    centos下安装软件的命令不是apt-get,而是yum,如果安装w3m,利用sudo yum install w3m w3m-img -y即可 △△△△△△△△如果你用的是centos或readh ...

  4. C++之内存管理

    内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄 ...

  5. Tomcat启动超时问题Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds

    使用Eclipse启动Tomcat时出现启动超时的问题如下所示: Server Tomcat v7.0 Server at localhost was unable to start within 4 ...

  6. LeetCode Path Sum IV

    原题链接在这里:https://leetcode.com/problems/path-sum-iv/description/ 题目: If the depth of a tree is smaller ...

  7. 【java规则引擎】规则引擎RuleBase中利用观察者模式

    (1)当RuleBase中有规则添加或删除,利用观察者模式实现,一旦有变动,规则引擎其他组件也做出相应的改变.(2)学习思想:当一个应用中涉及多个组件,为了实现易扩展,解耦思想.可以利用观察者模式实现 ...

  8. xlrd,xlwt读表格、写表格

    转:http://www.jb51.net/article/60510.htm

  9. Android蓝牙UUID简要

    UUID是"Universally Unique Identifier"的简称,通用唯一识别码的意思.对于蓝牙设备,每个服务都有通用.独立.唯一的UUID与之对应.也就是说,在同一 ...

  10. BZOJ2084:[POI2010]Antisymmetry

    浅谈\(Manacher\):https://www.cnblogs.com/AKMer/p/10431603.html 题目传送门:https://lydsy.com/JudgeOnline/pro ...