共用方式為


MFC ActiveX 控制項

ActiveX 控制項是可重複使用的軟體元件,以元件物件模型 (COM) 為基礎,支援各種不同的 OLE 功能並且可自訂以符合眾多軟體需求。

重要

ActiveX 是不應該用於新開發的舊版技術。 如需詳細資訊,請參閱 ActiveX 控制項

ActiveX 控制項是設計來用於一般 ActiveX 控制項容器和網際網路上的萬維網網頁。 您可以使用此處所述的 MFC 或 Active Template Library (ATL) 來建立 ActiveX 控制項。

ActiveX 控制項可以在自己的視窗中繪製自己、回應事件(例如按一下滑鼠),並透過介面來管理,其中包含與 Automation 物件類似的屬性和方法。

這些控制項可以針對許多用途進行開發,例如資料庫存取、資料監視或圖形。 除了可攜性之外,ActiveX 控制項還支援 ActiveX 控制項先前無法使用的功能,例如與現有 OLE 容器的相容性,以及將其功能表與 OLE 容器功能表整合的能力。 此外,ActiveX 控制項完全支援自動化,這可讓控制項公開可讀寫屬性和一組可由控制項使用者呼叫的方法。

您可以建立無視窗的 ActiveX 控制項和控制項,這些控制項只會在視窗變成作用中時建立視窗。 無視窗控制項可加快應用程式的顯示速度,並讓您能夠擁有透明和非單色控制項。 您也可以非同步載入 ActiveX 控制項屬性。

ActiveX 控制項會實作為可在任何 OLE 容器中使用的同進程伺服器(通常是小型物件)。 請注意,只有在設計為注意 ActiveX 控制項的 OLE 容器內使用時,才能使用 ActiveX 控制項的完整功能。 如需支援 ActiveX 控制項的容器清單,請參閱 將 ActiveX 控制項移植到其他應用程式 。 此容器類型之後稱為「控制項容器」,可以使用 控制項的屬性和方法操作 ActiveX 控制項,並以事件形式接收來自 ActiveX 控制項的通知。 下圖示范此互動。

Interplay of ActiveX control container and control.
ActiveX 控制項容器與視窗式 ActiveX 控制項之間的互動

如需優化 ActiveX 控制項的一些最新資訊,請參閱 MFC ActiveX 控制項:優化

若要建立 MFC ActiveX 控制項,請參閱 建立 ActiveX 控制項專案

如需詳細資訊,請參閱

ActiveX 控制項的基本元件

ActiveX 控制項會使用數個程式設計項目,有效地與控制項容器和使用者互動。 這些是 COleControl 類別 、一組事件引發函式,以及分派對應。

您所開發的每個 ActiveX 控制項物件都會從其 MFC 基類繼承一組強大的功能。 COleControl 這些功能包括就地啟用和自動化邏輯。 COleControl 可以提供控制項物件與 MFC 視窗物件相同的功能,以及引發事件的能力。 COleControl 也可以提供 無視窗控制項,這些控制項 依賴其容器來協助提供視窗提供的一些功能(滑鼠擷取、鍵盤焦點、捲動),但提供更快的顯示速度。

因為控制項類別衍生自 COleControl ,所以它會在符合特定條件時,繼承傳送或「引發」訊息的功能,稱為事件。 當控制項中發生重要事件時,這些事件可用來通知控制項容器。 您可以將參數附加至 事件,以將事件的其他資訊傳送至控制容器。 如需 ActiveX 控制項事件的詳細資訊,請參閱 MFC ActiveX 控制項:事件 一文

最後一個元素是分派對應,用來向控制項使用者公開一組函式(稱為方法)和屬性(稱為屬性)。 屬性可讓控制項容器或控制項使用者以各種方式操作控制項。 使用者可以變更控制項的外觀、變更控制項的特定值,或提出控制項的要求,例如存取控制項所維護的特定資料片段。 這個介面是由控制項開發人員決定,並使用類別檢視 來定義 。 如需 ActiveX 控制項方法和屬性的詳細資訊,請參閱 MFC ActiveX 控制項:方法和 屬性 一文 。

控制項與 Windows 和 ActiveX 控制項容器之間的互動

當控制項在控制項容器內使用時,它會使用兩種機制進行通訊:它會公開屬性和方法,並引發事件。 下圖示范這兩種機制的實作方式。

ActiveX control communicates with its container.
ActiveX 控制項容器與 ActiveX 控制項之間的通訊

上圖也說明控制項如何處理其他 OLE 介面(自動化和事件除外)。

所有控制項與容器的通訊都是由 COleControl 執行。 若要處理容器的某些要求, COleControl 將會呼叫在控制項類別中實作的成員函式。 所有方法和部分屬性都會以這種方式處理。 控制項的 類別也可以藉由呼叫 的成員函式來起始與容器的 COleControl 通訊。 事件會以這種方式引發。

ActiveX 控制項的作用中和非作用中狀態

控制項有兩個基本狀態:作用中和非作用中。 傳統上,這些狀態會區分控制項是否有視窗。 作用中的控制項有視窗;非使用中的控制項沒有。 隨著無視窗啟用的引進,此區別已不再通用,但仍適用于許多控制項。

當無視窗控制項 作用中時,它會從其容器叫用滑鼠擷取、鍵盤焦點、捲動和其他視窗服務。 您也可以 提供滑鼠互動給非使用中的控制項 ,以及建立控制項, 等到啟動才能建立視窗

當具有視窗的控制項變成作用中時,它可以與控制項容器、使用者和 Windows 完全互動。 下圖示范 ActiveX 控制項、控制項容器和作業系統之間的通訊路徑。

Msg processing in active windowed ActiveX control.
視窗式 ActiveX 控制項中的 Windows 訊息處理 (作用中時)

序列化

序列化資料的能力,有時稱為持續性,可讓控制項將其屬性的值寫入永續性儲存體。 然後,您可以從儲存體讀取物件的狀態,以重新建立控制項。

請注意,控制項不負責取得儲存體媒體的存取權。 相反地,控制項的容器會負責為控制項提供儲存媒體,以在適當的時間使用。 如需序列化的詳細資訊,請參閱 MFC ActiveX 控制項:序列化 一文 。 如需優化序列化的資訊,請參閱 優化 ActiveX 控制項中的持續性和初始化 :優化。

安裝 ActiveX 控制項類別和工具

當您安裝 Visual C++ 時,如果已在安裝程式中選取 ActiveX 控制項,則會自動安裝 MFC ActiveX 控制項類別和零售和偵錯 ActiveX 控制項執行時間 DLL(預設為選取它們)。

根據預設,ActiveX 控制項類別和工具會安裝在 \Program Files\Microsoft Visual Studio .NET 下的下列子目錄中:

  • \Common7\Tools

    包含測試容器檔案 (TstCon32.exe,以及其說明檔)。

  • \Vc7\atlmfc\include

    包含使用 MFC 開發 ActiveX 控制項所需的 Include 檔案

  • \Vc7\atlmfc\src\mfc

    包含 MFC 中特定 ActiveX 控制項類別的原始程式碼

  • \Vc7\atlmfc\lib

    包含使用 MFC 開發 ActiveX 控制項所需的程式庫

MFC ActiveX 控制項也有範例。 如需這些範例的詳細資訊,請參閱 控制項範例:MFC 型 ActiveX 控制項

另請參閱

使用者介面元素