(第四版中文版)[八]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、在父窗口類裏,手工加入必要的與新控件有關的事件消息處理函數及原型。加入事件映射表宏。

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