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 (39)

    26w/m 70errors The rough across the plain soon became so bad that we tried to get Bruce to drive bac ...

  2. git合并分支与解决冲突

    前提: 当前开发的分支为feature/20161129_317606_algoplatform_1,由于feature/20161130_322574_tmstools_1分支有新内容,所以准备将f ...

  3. Creating a Game with CocosBuilder

    Creating a Game with CocosBuilder This tutorial aims to show how you can use CocosBuilder together w ...

  4. LINUX系统yum安装SVN服务及其配置

    待: http://oplinux.com/app/svn/linux-yum-install-svn.html  //基础设置及流程 http://files.cnblogs.com/logon/s ...

  5. 使用jenkins并发布应用到tomcat

    jenkins的介绍及安装请自行百度,本文重点介绍如何使用jenkins,并自动发布web应用到tomcat中. 1 . 创建项目 打开jenkins --> 新建 --> 填写item名 ...

  6. CodeForces - 622F:The Sum of the k-th Powers (拉格朗日插值法求自然数幂和)

    There are well-known formulas: , , . Also mathematicians found similar formulas for higher degrees. ...

  7. ACM学习历程—Codeforces Round #354 (Div. 2)

    http://codeforces.com/contest/676 在allzysyz学弟和hqwhqwhq的邀请下,打了我的第三场CF... 毕竟在半夜..所以本来想水到12点就去睡觉的...结果一 ...

  8. Django: TemplateDoesNotExist (rest_framework/api.html)

    需要在站点前面的INSTALLED_APP里面加上rest_framework

  9. openfaas 安装(docker swarm 模式)

     备注:为了简单使用的是docker-compose 进行组件的安装  预备环境:    docker  (配置好 swarm  集群模式)  docker-compose     1. docker ...

  10. Oracle视图编译错误解决办法

    因为新搭的环境,数据库是从另一个现成的环境导过来的,直接后台用exp和imp命令操作.但是新环境的Oracle数据库有问题,一些视图创建不了,导致用到这些视图的视图和存储过程也编译不了.后来手工重新编 ...