首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

COM 原理與應用:ActiveX 控制項完整指南

     編輯:關於C++

什麼是 ActiveX 控制項?

ActiveX 控制項是 Microsoft 基於 COM/OLE 技術推出的可重用軟體元件,同時具備:

  • 自動化物件:支援 IDispatch,可被腳本語言(VBScript、JavaScript)呼叫。
  • 視覺化 UI 元素:擁有視窗句柄、支援繪製、滑鼠/鍵盤訊息處理,如同原生 Windows 控制項。
  • 網頁嵌入:透過 <OBJECT> 標籤嵌入 HTML,IE 可動態下載、安裝、執行。

技術基石:OLE 複合文件技術

ActiveX 控制項幾乎涵蓋 OLE 嵌入物件與容器互動的所有技術:

  • 結構化儲存:IStorage/IStream 持久化狀態。
  • 自動化:IDispatch 暴露屬性/方法/事件。
  • 就地啟動:在容器視窗內直接編輯,無獨立視窗切換。
  • 屬性頁:標準化屬性編輯介面(IPropertyPage/IPropertyPageSite)。
  • 永久物件:IPersistStream/IPersistStorage/IPersistPropertyBag。
  • 可連接物件:IConnectionPointContainer/IConnectionPoint 實現事件通知。

核心特性詳解

就地啟動

控制項在容器視窗區域內直接繪製、處理輸入,提供「所見即所得」體驗。要求控制項與容器嚴格遵循 IOleInPlaceObject/IOleInPlaceSite 等介面協定。

屬性頁

屬性表包含多個屬性頁(標籤頁),每頁為無模式子視窗。四方互動:客戶端、COM 物件、屬性表、屬性頁,透過預定義 COM 介面與 API 通訊。

屬性變更通知

  1. 請求許可:物件改變屬性前,先詢問容器 IPropertyNotifySink::OnRequestEdit。
  2. 通知已變更:變更後通知容器 IPropertyNotifySink::OnChanged。

ActiveX 控制項的基本需求

  1. 屬性與方法管理(IDispatch、型別庫)。
  2. 事件機制(IConnectionPointContainer)。
  3. 使用者介面特性(可見性、就地啟動、無視窗模式)。
  4. 狀態持久性(IPersist* 系列)。

控制項與容器架構

  • 容器:表單、對話方塊、複合文件視圖、文件物件、IE 瀏覽器。管理版面配置、持久化、環境屬性、事件處理、鍵盤導航、擴展控制。
  • 模式:設計模式(設計時屬性編輯)與執行模式(使用者互動)。

關鍵 COM 介面

介面用途
IOleObject / IOleClientSiteOLE 嵌入物件基礎通訊(所有嵌入物件必須實作)
IOleControl / IOleControlSiteActiveX 專用擴展:環境屬性、鍵盤控制、擴展控制
IConnectionPointContainer管理連接點,支援事件多播
IProvideClassInfo / IProvideClassInfo2提供型別資訊,支援動態綁定
IPersistStreamInit / IPersistStorage / IPersistPropertyBag多種持久化格式

ActiveX 與網際網路

  • IE 作為容器,支援動態下載、安裝、執行 ActiveX 控制項。
  • 控制項打包為 .cab 壓縮檔,codebase 屬性指定 URL。
  • 需支援自我註冊(DllRegisterServer),IE 瀏覽頁面時自動註冊。
  • 授權機制:設計時授權(開發者合法性)、執行時授權(使用者合法性)。

開發工具選擇

總結

ActiveX 控制項是 COM/OLE 技術在元件化 UI 與網頁應用上的集大成者。掌握其核心介面(IOleObject、IOleControl、IConnectionPointContainer、IPersist*、IDispatch)、持久化、事件、就地啟動、授權與打包部署流程,是開發專業級 ActiveX 控制項的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
工具特點適用場景
MFC功能豐富、Wizard 支援、與 VC++ 整合緊密複雜、功能完整的桌面/網頁控制項
ATL (Active Template Library)輕量、高效、無 MFC 依賴、適合網路下載小型、高效能、網頁部署的控制項
BaseControl Framework底層框架、需深入理解結構特殊需求、極度客製化控制項