(第四版中文版)[八]ActiveX

可以认为 ActiveX 控件也是一个子窗口。包含控件的窗口称为包容器。

ActiveX 控件与普通控件的不同点:属性和方法,这是它最突出的特点。

属性有符号化的名字,这些名字对应着内部的整数索引,可以通过指定一个整数索引及相应的值来设置一个控件的属性值,也可以通过整数索引值来获取控件的属性值。在特定情况下,ClassWizard 允许定义客户窗口类的成员变量,该变量与窗口所包含的某个控件的属性相关联。在生成的对话框数据交换( DDX ) 代码中,可以实现控件属性和窗口类数据成员之间的数据交换。

方法与函数很类似。一个方法有一个符号化的名字,同时还有一组和一个返回值。

ActiveX 控件不像普通控件一个发送 WM_消息给它的包容器窗口,而是激发事件。一个事件有一个符号化的名字及一组任意次序的参数--实际上是由控件调用的包容器函数。对客户类来说,事件与控件的通知消息是一样的。

在MFC库中,ActiveX 控件就像子窗口一样,但在控件窗口和包容器窗口间有一层重要的的代码。实际上控件可能没有窗口。当调用 Create() 时,并不是直接建立控件窗口,而是会把控件代码载入,并发一个“实地激活”命令。然后 ActiveX 控件再建立自己的窗口中,而且通过MFC的CWnd 类指针可以访问该窗口中,客户程序最好不要直接使用该控件的 hWnd 句柄。

通常一个或多个 ActiveX 控件会保存在一个动态连接库中,但这种动态连接库的文件扩展名通常为OCX,而不是DLL。包容器程序根据Windows注册表,利用复杂的COM技术,在需要的时候装入动态连接库。

要使用 ActiveX 控件,必须理解如何访问控件的属性,理解在DDX代码和这些属性值之间的相互作用关系。 

将 ActiveX 控件锁定在内存中: AfxOleLockControl( m_calendar.GetClsid() ) ;直到程序退出或者调用 AfxOleUnlockControl () 。

ActiveX 控件在HTML中的使用:

< OBJECT

CLASSID="clsid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"

WIDTH=300 HEIGHT=200 BORDER=1 HSPACE=5 ID=calendar >

运行时创建 ActiveX 控件:

1、在项目中插入组件。ClassWizard 会建立控件类的文件。

2、在对话框类或其他的C++窗口类中加入一个ActiveX 控件类数据成员。一个嵌入的C++对象会跟它的窗口对象一起被构造和析构。

3、在 Resource Symbols 为将要创建的控制添加一个 ID 常数。

4、如果父窗口是一个对话框,则用 ClassWizard 映射该对话框的 WM_INITDIALOG 消息,然后重载 CDialog::OnInitDialog 。如果是其他的窗口,则用 ClassWizard 映射 WM_CREAT 消息。新的函数必须调用内嵌控件类的 Create 成员函数。这个调用会间接地在对话框中显示新的控件。该控件将在父窗口被删除时被正常删除掉。

5、在父窗口类里,手工加入必要的与新控件有关的事件消息处理函数及原型。加入事件映射表宏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章