MFC ActiveX 控制項

2021-06-01 05:09:46 字數 2798 閱讀 9766

visual studio .net 2003

activex 控制項是基於元件物件模型 (com) 的可重用軟體元件,它支援廣泛的 ole 功能並可自定義以滿足多種軟體的需要。activex 控制項旨在用於普通的 activex 控制項容器和 internet 上的全球資訊網頁。您既可以用此處介紹的 mfc 也可以用活動模板庫 (atl) 來建立 activex 控制項。

activex 控制項可以在自己的視窗中對自身進行描述,對事件(如單擊滑鼠)做出響應,並可以通過包括屬性和方法的介面進行管理,這些屬性和方法與自動化物件中的屬性和方法相似。

可以為許多用途(如資料庫訪問、資料監視或圖形繪製)開發這些控制項。除可移植性外,activex 控制項還支援先前所不具備的功能,如與現有 ole 容器的相容性和將其選單與 ole 容器的選單整合在一起的能力。另外,activex 控制項完全支援自動化,使控制項得以公開讀/寫屬性和一組可由控制項使用者呼叫的方法。

可以建立無視窗的 activex 控制項和只有在活動時才建立視窗的控制項。無視窗控制項可加速應用程式的顯示並可包含透明控制項和非矩形控制項。也可以非同步載入 activex 控制項的屬性。

activex 控制項作為程序內伺服器(通常是乙個小型物件)實現,而程序內伺服器可用於任何 ole 容器。請注意,只有在識別 activex 控制項的 ole 容器內使用時,activex 控制項的全部功能才可用。有關支援 activex 控制項的容器列表,請參見將 activex 控制項應用到其他應用程式中。這種容器型別(以後稱為「控制項容器」)可以通過使用 activex 控制項的屬性和方法來操作該控制項,並可以從 activex 控制項接收事件形式的通知。下圖演示了此互動。

activex 控制項容器與有視窗的 activex 控制項之間的互動

有關優化 activex 控制項的某些最新資訊,請參見 mfc activex 控制項:優化。

若要建立 mfc activex 控制項,請參見建立 activex 控制項專案。

activex 控制項使用幾個程式設計元素與控制項容器和使用者有效地進行互動。這些元素是 colecontrol 類、一組事件引發函式和排程對映。

您開發的每個 activex 控制項物件都從其 mfc 基類colecontrol繼承一組強大的功能。這些功能包括就地啟用和自動化邏輯。colecontrol可為控制項物件提供與 mfc 視窗物件相同的功能,並提供引發事件的能力。colecontrol還可提供無視窗控制項。無視窗控制項依賴其容器的幫助獲得視窗提供的某些功能(滑鼠捕獲、鍵盤焦點、滾動),但顯示速度快得多。

由於該控制項類是從colecontrol派生的,因此它繼承了在滿足某些條件時,向控制項容器傳送或「引發」訊息(稱為事件)的能力。這些事件用於在控制項中發生重要的事情時通知控制項容器。通過向事件附加引數,可將關於事件的其他資訊傳送到控制項容器。有關 activex 控制項事件的更多資訊,請參見文章 mfc activex 控制項:事件。

最後的元素是排程對映,它用於向控制項使用者公開一組函式(稱為方法)和特性(稱為屬性)。屬性使控制項容器或控制項使用者得以以各種方式操作控制項。使用者可以更改控制項的外觀、更改控制項的某些值或生成控制項請求(如訪問控制項所維護的特定資料片段)。該介面由控制項開發人員確定並通過「類檢視」定義。有關 activex 控制項方法和屬性的更多資訊,請參見文章 mfc activex 控制項:方法和屬性。

當在控制項容器內使用控制項時,該控制項使用兩種機制進行通訊:一種是公開屬性和方法,一種是引發事件。下圖演示了這兩種機制的實現方式。

activex 控制項容器與 activex 控制項之間的通訊

上圖還闡釋了控制項如何處理除自動化和事件之外的其他 ole 介面。

控制項與容器進行的所有通訊都由colecontrol執行。為處理容器的某些請求,colecontrol呼叫在控制項類中實現的成員函式。所有方法和部分屬性都是以此方式處理的。控制項類也可以通過呼叫colecontrol的成員函式來初始化與容器的通訊。事件是以此方式引發的。

控制項有兩種基本狀態:活動和非活動。傳統上,根據控制項是否有視窗來區分這兩種狀態。活動控制項有視窗,而非活動控制項沒有視窗。引入了無視窗啟用後,這種區別不再通用,但仍適用於許多控制項。

當無視窗控制項處於活動狀態時,它從其容器呼叫滑鼠捕獲、鍵盤焦點、滾動和其他視窗服務。除了可以建立等待直到被啟用以建立視窗的控制項外,還可以為非活動控制項提供滑鼠互動。

當有視窗的控制項處於活動狀態時,它能夠與控制項容器、使用者和 windows 進行完全互動。下圖演示了 activex 控制項、控制項容器和作業系統之間的通訊路徑。

有視窗的 activex 控制項(活動時)中的 windows 訊息處理

序列化資料的能力(有時稱為永續性)使控制項得以將其屬性值寫入永續性儲存。這樣就可以通過從儲存讀取物件狀態來重新建立控制項。

請注意,控制項並不負責獲取對儲存**的訪問。相反,控制項的容器負責為控制項提供儲存**以便在適當的時候使用。有關序列化的更多資訊,請參見文章 mfc activex 控制項:序列化。有關優化序列化的資訊,請參見「activex 控制項:優化」中的優化永續性和初始化。

安裝 visual c++ 時,如果在安裝過程中選擇了 activex 控制項(預設情況下選擇它們),則將自動安裝 mfc activex 控制項類和發布及除錯 activex 控制項執行時 dll。

預設情況下,activex 控制項類和工具安裝在 \program files\microsoft visual studio .net 下的下列子目錄中:

還有 mfc activex 控制項的示例。有關這些示例的更多資訊,請參見控制項示例:基於 mfc 的 activex 控制項。

MFC ActiveX 控制項 新增另一自定義屬性頁

在微軟msdn上有詳細過程,但還有一步要注意 對話方塊的屬性中,border改為 none style改為child 微軟幫助文件如下 開啟控制項的專案,則在專案工作區中開啟資源檢視。右擊在 資源檢視開啟快捷選單並單擊新增資源。展開對話方塊節點,然後選擇idd ole proppage small。...

MFC ActiveX 觸發OnCreate方法

用mfc開發activex,直接在xxctrl裡面重寫oncreate方法是無法被觸發的,因為colecontrol裡面已經定義了wm create訊息的對映,所以想要觸發oncreate方法需要在ctrl類重寫wm create的訊息對映,這樣的話方法名什麼的也就不需要是oncreate了,任意名...

MFC ActiveX 觸發OnCreate方法

用mfc開發activex,直接在xxctrl裡面重寫oncreate方法是無法被觸發的,因為colecontrol裡面已經定義了wm create訊息的對映,所以想要觸發oncreate方法需要在ctrl類重寫wm create的訊息對映,這樣的話方法名什麼的也就不需要是oncreate了,任意名...