ATL向控件添加私有属性-成员变量
https://msdn.microsoft.com/zh-cn/library/cc451389(v=vs.71).aspx
----------------------------------------------
下面步骤为给控件添加属性的标准步骤。其中如果涉及到COM多线程编程的使用全局变量会造成多线程之间共享全局变量的效果,但是也会出现相应的问题,比如
启动多个页面也就是启动了多个activex控件的时候如果每个控件都在使用一个全局变量作为标识进行判断线程是否继续运行。
如果其中一个页面(也就是activex) 把该全局变量置成了false的话,会影响其他线程运行。
不过使用全局变量也有一定的好处,就是可以防止多开。在activex启动的时候可以判断该全局变量然后决定是否运行另一个;
上面的多线程使用全局变量有影响,解决方案就是使用类的私有变量,也就是给类添加成员变量;
然后添加get方法 注意参数为引用。
====================================================================
步骤 3:向控件添加属性
IPolyCtl 是包含控件的自定义方法和属性的接口,您将在其中添加属性。
使用“添加属性向导”添加属性
- 在“类视图”中右击 IPolyCtl(展开“Polygon”分支找到它)。
 - 在快捷菜单上单击“添加”,然后单击“添加属性”。
“添加属性向导”随即出现。
 - 在属性类型的下拉列表中,选择“short”。
 - 键入 
Sides作为属性名:
 - 单击“完成”完成属性的添加。
 
将属性添加到接口时,MIDL(编译 .idl 文件的程序)定义检索其值的 Get 方法和设置新值的 Put 方法。这些方法的命名方式是在属性名的前面加上 put_ 和 get_。
“添加属性向导”将必需的行添加到 .idl 文件。它还将 Get 和 Put 函数原型添加到 PolyCtl.h 中的类定义,并将一个空实现添加到 PolyCtl.cpp。您可以通过打开 PolyCtl.cpp 并查找函数 get_Sides 和 put_Sides 来进行检查。
虽然现在有了设置和检索属性的主干函数,但需要有地方存储属性。您将创建存储属性的变量,并相应地更新函数。
创建存储属性的变量并更新 put 和 get 方法
- 从解决方案资源管理器中,打开 PolyCtl.h 并在类定义末尾的 
m_clrFillColor定义后添加下行:short m_nSides;
 - 设置 
m_nSides的默认值。向 PolyCtl.h 中的构造函数添加一行,使默认形状成为三角形:CPolyCtl()
{
m_nSides = 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向控件添加私有属性-成员变量的更多相关文章
- 如何给ActiveX控件添加“事件”“属性”“标准事件”“自定义事件”等一些相关操作
		
上一篇小编带大家熟悉了一下ActiveX的建立以及相关的概念,(http://blog.csdn.net/u014028070/article/details/38424611) 本文介绍下如何给控件 ...
 - WPF系列 —— 控件添加依赖属性(转)
		
WPF系列 —— 控件添加依赖属性 依赖属性的概念,用途 ,如何新建与使用.本文用做一个自定义TimePicker控件来演示WPF的依赖属性的简单应用. 先上TimePicker的一个效果图. 概念 ...
 - 【C#】使用IExtenderProvider为控件添加扩展属性,像ToolTip那样
		
申明: - 本文适用于WinForm开发 - 文中的“控件”一词是广义上的说法,泛指包括ToolStripItem.MenuItem在内单个界面元素,并不特指继承自Control类的狭义控件 用过To ...
 - WPF系列 —— 控件添加依赖属性
		
依赖属性的概念,用途 ,如何新建与使用.本文用做一个自定义TimePicker控件来演示WPF的依赖属性的简单应用. 先上TimePicker的一个效果图. 概念 和 用途:依赖属性是对传统.net ...
 - WPF对某控件添加右键属性
		
代码创建右键属性 ContextMenu cm = new ContextMenu(); MenuItem mi = new MenuItem(); mi.Header = "打开此文件所有 ...
 - 【VS开发】ActiveX控件如何定制属性?
		
在很多场合下会存在这样的需求,那就是使用方在实际使用控件之前就想控件已经做了相应的处理比如加载的控件版本不正确等,或者需要在加载时才确定能够使用的功能集:这个时候传统的配置文件已经无法满足这种类型的需 ...
 - 在C#中使用属性控件添加属性窗口
		
转自原文 在C#中使用属性控件添加属性窗口 第一步,创建在应用程序中将要展现的字段属性为public公有属性.其中,所有的属性必须有get和set的方法(如果不设置get方法,则要显示的属性不会显示在 ...
 - m_Orchestrate learning system---二十六、动态给封装好的控件添加属性
		
m_Orchestrate learning system---二十六.动态给封装好的控件添加属性 一.总结 一句话总结:比如我现在封装好了ueditor控件,我外部调用这个控件,因为要写数据到数据库 ...
 - repeater中后台动态为控件添加属性
		
在此贴出repeater中的ItemDataBound事件中的代码: private void ItemDataBound(object sender, RepeaterItemEventArgs e ...
 
随机推荐
- input预览上传图片
			
html代码 <input type="file" name="file" id="file" > <img src=&q ...
 - 软工作业-四则运算(java实现)BY叶湖倩,叶钰羽
			
四则运算生成器 BY-信安1班 叶湖倩(3216005170) 信安1班 叶钰羽(3216005171) 1. 项目介绍 源代码GitHub地址:https://github.com/yeyuyu/s ...
 - 【CSAPP】一、计算机系统漫游
			
一.位+上下文 文本文件 / 二进制文件: 文本文件是只由ASCII码构成的文件 二.从源代码到可执行文件的顺序 源代码 ——> 可执行文件(机器代码)共有四步: 全过程代码 gcc hello ...
 - pg_rewind 源端时间线发生改变 同步失败
			
master-standby情况下,发生如下行为: 1.master停掉后,standby做为新的master(可能存在部分事物没有同步到standby中). 2.新master运行过程中出错,进行恢 ...
 - Linux中查看各文件夹大小命令:du -h --max-depth=1
			
Linux中查看各文件夹大小命令:du -h --max-depth=1 du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-siz ...
 - Python爬虫----抓取豆瓣电影Top250
			
有了上次利用python爬虫抓取糗事百科的经验,这次自己动手写了个爬虫抓取豆瓣电影Top250的简要信息. 1.观察url 首先观察一下网址的结构 http://movie.douban.com/to ...
 - TF随笔-4
			
>>> import tensorflow as tf>>> a=tf.constant([[1,2],[3,4]])>>> b=tf.const ...
 - C++ Primer 第四版中文版
			
C++Primer是C++的经典教程. 开始时间:2014-08-10 完成时间:2014-08-28 学习成果:基础语法+
 - HDU - 6178:Monkeys (贪心&树上最大匹配输&输入优化)
			
There is a tree having N vertices. In the tree there are K monkeys (K <= N). A vertex can be occu ...
 - Hibernate HQL查询(1)
			
1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql ="from Users"; ...