cplusplus

ActiveX控件中全局变量的一种用法

上一篇 / 下一篇  2011-06-23 10:57:50 / 个人分类:转载

在一个程序中,用到了好几个相同控件的实例,现在希望能通过某种方法来唯一的标志这些控件实例,以便能为每一个控件提供一个正确的配置文件,这是件很容易的事,但问题是并不希望控件增加什么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似乎是在设计时越后来添加的控件,在运行时越最早加载,真是令人意外。

TAG: ActiveX控件

 

评分:0

我来说两句

Open Toolbar