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 ...
随机推荐
- 内存保护机制及绕过方案——通过覆盖SEH异常处理函数绕过/GS机制
通过SEH链绕过GS保护机制 ⑴. 原理分析: i.异常处理结构(SEH)处理流程如下: SEH是基于线程的,每一个线程都有一个独立的SEH处理结果,在线程信息块中的第一个结构指向线程的异常列表,F ...
- LeetCode OJ:Plus One (加1)
Given a non-negative number represented as an array of digits, plus one to the number. The digits ar ...
- 【linux】基础知识学习
[版本] 两种:内核版本 . 发行版本 内核版本从 www.kernel.org 查看 发行版本: 1.retHat, centOS 更稳定,更安全,适宜做企业服务器 2.ubuntu, Debian ...
- PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题
在你要输出的内容前先输出"\xEF\xBB\xBF",例如:你要输出的内容保存在$content里$content = "\xEF\xBB\xBF".$cont ...
- 深度学习(六十五)移动端网络MobileNets
- NGUI 学习使用
http://www.tasharen.com/forum/index.php?board=12.0
- tensorflow中常用激活函数和损失函数
激活函数 各激活函数曲线对比 常用激活函数: tf.sigmoid() tf.tanh() tf.nn.relu() tf.nn.softplus() tf.nn.softmax() tf.nn.dr ...
- vc++ windows获取计算机信息
在软件开发中,我们经常要获当前系统的版本号,判断当前是什么系统,获取获取物理内存和可用内存大小,获取CPU名称.内核数目.主频,获取MAC地址,获取屏幕分辨率,下面的这个c++类将包含所有这些信息. ...
- 简直offer-第四章解决面试题思路(二叉树中和为某一值的路径)
题目:输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点往下一直到叶子节点形成一条路径. 思路:很明显用前序遍历可以从根节点开始遍历到叶子节点,然后将遍历的节点添加到 ...
- 1.2 java web的发展历史
前言 了解java web的发展历史和相关技术的演进历程,非常有助于加深对java web技术的理解和认识. 阅读目录 1.Servlet的出现 2.Jsp的出现 3.倡导了MVC思想的Servlet ...