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

MFC 顯示 HTML 對話框:使用 MSHTML.dll ShowHTMLDialog

     編輯:VC++

核心方法

動態載入 MSHTML.dll,取得 ShowHTMLDialog 函數指標,建立 URL Moniker 顯示 HTML 內容。

完整實作

BOOL ShowHtml() {
    HINSTANCE hMshtml = LoadLibrary(_T("MSHTML.DLL"));
    if (!hMshtml) return FALSE;

    using PFN_SHOWHTMLDIALOG = HRESULT (WINAPI*)(HWND, IMoniker*, VARIANT*, VARIANT*, VARIANT*);
    auto pfnShowHTMLDialog = (PFN_SHOWHTMLDIALOG)GetProcAddress(hMshtml, "ShowHTMLDialog");
    if (!pfnShowHTMLDialog) { FreeLibrary(hMshtml); return FALSE; }

    WCHAR url[] = L"https://www.example.com/page.html";
    IMoniker* pMoniker = NULL;
    HRESULT hr = CreateURLMoniker(NULL, url, &pMoniker);
    if (FAILED(hr)) { FreeLibrary(hMshtml); return FALSE; }

    hr = pfnShowHTMLDialog(NULL, pMoniker, NULL, NULL, NULL);
    pMoniker->Release();
    FreeLibrary(hMshtml);
    return SUCCEEDED(hr);
}

關鍵點解析

  • 動態載入:避免靜態連結 MSHTML.dll 導致無該 DLL 系統上啟動失敗。
  • Moniker 機制:CreateURLMoniker 將 URL 封裝為 COM 物件,支援 https://、file://、res:// 等協定。
  • 對話框特性:模態、自帶 IE 渲染引擎、支援腳本/樣式/ActiveX。
  • 參數擴充:第 3/4/5 參數可傳遞 VARIANT 設定對話框尺寸、標題、外部物件 (window.external) 等。

進階:顯示記憶體中 HTML 字串

ShowHTMLDialog 僅接受 Moniker。若需顯示記憶體字串,可:

  1. 寫入暫存檔 → file:// Moniker。
  2. 實作自訂 IMoniker (透過 IPersistStreamInit/IStream) 直接串流記憶體資料。
  3. 改用 CHtmlView / WebBrowser2 控制項 + IPersistStreamInit::Load 載入 IStream 包裝的記憶體資料(更靈活,參考文章 83504)。

部署注意

  • 目標機需安裝 IE 4.0+ (含 MSHTML.dll),現代 Windows 內建滿足。
  • 若專案已連結 mshtml.lib,可直接 #include 靜態呼叫,但動態載入更彈性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved