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

ATL 實作自訂 IE 頻條、工具列與桌面工具列:Band Object 完整架構解析

     編輯:關於VC++

Band Object 是 IE 與 Windows Shell 共用的可停駐 UI 元件,分為四種類型:垂直/水平瀏覽器頻條、IE 工具列、桌面工具列。本文詳細解析 COM 介面實現、註冊表部署、ATL 專案建立全流程,附完整原始碼架構。

核心概念:Band、Site、Category ID

Band 類型顯示位置元件分類 CATID
垂直瀏覽器頻條IE 左/右側CATID_InfoBand (00021493-...)
水平瀏覽器頻條IE 頂/底部CATID_CommBand (00021494-...)
桌面工具列工作列右鍵選單CATID_DeskBand (00021492-...)
IE 工具列IE 工具列區HKLM\Software\Microsoft\Internet Explorer\Toolbar\{CLSID}

必須實作的 COM 介面

  1. IPersistStreamInit:屬性持久化(Load/Save),ATL 用 IPersistStreamInitImpl + PROP_MAP 實作。
  2. IObjectWithSite:SetSite(pUnkSite) 為初始化/釋放核心。
    取得父視窗:IOleWindow→GetWindow;
    若需鍵盤焦點管理 → 保存 IInputObjectSite;
    若需控制 IE 導航 → IServiceProvider→QueryService(SID_SWebBrowserApp) 取得 IWebBrowser2 並建立連接點接收 DWebBrowserEvents2。
  3. IDeskBand / IDockingWindow / IOleWindow:共 6 方法。
    GetBandInfo 回傳標題、最小/最大尺寸、整數倍、模式旗標(如 DBIMF_VARIABLEHEIGHT)。
    ShowDW/CloseDW/ResizeBorderDW 控制視窗顯示/銷毀/邊框調整。

選擇性介面:IInputObject、IOleCommandTarget

  • IInputObject:UIActivateIO(焦點切換)、HasFocusIO、TranslateAcceleratorIO。
  • IOleCommandTarget:透過 IInputObjectSite→QueryInterface 取得,支援命令:
    DBID_BANDINFOCHANGED、DBID_MAXIMIZEBAND、DBID_SHOWONLY、DBID_PUSHCHEVRON。

註冊表部署關鍵

  • 基本項目:HKCR\CLSID\{CLSID} (Default)=選單文字、InProcServer32、ThreadingModel=Apartment。
  • 瀏覽器頻條顯示 HTML:
    Instance\CLSID = {4D5C8C2A-D075-11D0-B416-00C04FB90376}
    Instance\InitPropertyBag\Url = HTML 檔路徑。
  • 工具列額外需在 HKLM\...\Toolbar\{CLSID} 建立值。
  • ATL 專案中直接編輯 .rgs 檔即可自動註冊,範本見文中完整 HKCR/HKLM 區塊。

ATL 專案建立步驟摘要

  1. ATL DLL 專案。
  2. Add ATL Object → Internet Explorer Object(自動加入 IObjectWithSite 支援)。
  3. 命名(如 VerBar),執行緒模型 Apartment,介面 Dual(需事件),聚合非 Only。
  4. Debug 連結錯誤 _AtlAxCreateControl → 專案設定 Link 加入 atl.lib 或 #pragma comment(lib,"atl")。
  5. 除錯:專案設定 Debug 命令列指向 IEXPLORE.EXE。

範例功能一覽

  • 垂直頻條:載入 HTML,可操控 IE 導航。
  • 水平頻條:編輯視窗,同步顯示當前頁面 BODY 來源。
  • IE 工具列:空白工具列示範。
  • 桌面工具列:單行編輯框,輸入命令/路徑按 Enter 執行 Shell 開啟動作。

掌握 Band Object 架構,即可為 IE/Shell 擴充任意專業級側邊欄或工具列功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved