ActiveX控件中全局变量的一种用法
2006-01-11 12:34
274 查看
在一个程序中,用到了好几个相同控件的实例,现在希望能通过某种方法来唯一的标志这些控件实例,以便能为每一个控件提供一个正确的配置文件,这是件很容易的事,但问题是并不希望控件增加什么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似乎是在设计时越后来添加的控件,在运行时越最早加载,真是令人意外。
初看了下,感觉这不太可能吧,后来,想到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似乎是在设计时越后来添加的控件,在运行时越最早加载,真是令人意外。
相关文章推荐
- ActiveX控件中全局变量的一种用法 .
- index.php中定义一些全局变量的用法记录
- php文件上传之$_FILES全局变量用法介绍
- C++学习 c++作用域运算符用法(全局变量和局部变量)
- 全局变量的用法
- python中一种特殊的全局变量的方式
- extern用法,全局变量,全局函数与头文件(重复定义)
- qt中全局变量的用法
- extern 用法,在命名空间全局变量用到
- static修饰全局变量,局部变量和函数用法
- lib和dll中全局变量的链接性及用法总结
- lib和dll中全局变量的链接性及用法总结
- 两个.c文件访问同一个全局变量的用法
- 全局变量的用法
- c/c++中extern、static、const的用法及全局变量/常量
- python基础 - global关键字及全局变量的用法
- js的String变量的用法,对jquery的append的一种替代方式
- extern 用法,全局变量与头文件(重复定义)
- 关于extern声明全局变量的用法
- python中全局变量的用法