Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192816
  • 博文数量: 90
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2017-08-23 16:48
文章分类

全部博文(90)

文章存档

2015年(1)

2011年(21)

2010年(59)

2009年(9)

我的朋友

分类: C/C++

2010-07-14 09:57:40

在一个程序中,用到了好几个相同控件的实例,现在希望能通过某种方法来唯一的标志这些控件实例,以便能为每一个控件提供一个正确的配置文件,这是件很容易的事,但问题是并不希望控件增加什么ID,Name之类的属性,而是希望能在控件内部自行的标志。这是我一个朋友问我的。
初看了下,感觉这不太可能吧,后来,想到COleControl中有一个AmbientDisplayName,因此建议给这位朋友了。应该说,在VB或者DELPHI之类的容器中,这个函数是有用处的,但是总觉得毕竟AmbientDisplayName并不要求所有的容器都能提供的,感觉上不太可靠,所以努力的翻查资料,希望能找到。
于是无意中突然想到了全局变量,作为一种特殊的Dll来说,ActiveX控件中的全局变量是能用在整个进程中的,当然也包括所有的ActiveX实例中,因此全局变量可以轻松的胜任这种在多个ActiveX实例之间的协调工作,而不需要控件客户程序的干预。
就做了个MFC的ActiveX测试控件试试了。
1.在控件.cpp中定义全局变量
UINT gl_nCount = 0;
2.定义控件成员变量
UINT m_nID;
在控件构造函数中
m_nID = gl_nCount;
gl_nCount++;
3.添加只读属性ID,在
long GetID()函数中
return m_nID;
4.做了个VB程序,添加了几个控件,在Form_Load中
Dim i As Integer
For i = 0 To 3
    MsgBox TFire1(i).ID
Next
测试发现,确实可以区分开来,不过有意思的是,VB似乎是在设计时越后来添加的控件,在运行时越最早加载,真是令人意外。

 
阅读(2283) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~