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

IE WebBrowser 控件進階應用五大技巧:記憶體 HTML、右鍵菜單、External 擴展、HTML 對話框、腳本執行

     編輯:關於VC++

前言

IWebBrowser2 / CHtmlView / CWebBrowser2 是 MFC/ATL 應用程式內嵌瀏覽器功能的核心。本文匯總五項實用進階技巧,助你突破「單純瀏覽網頁」的侷限。

技巧一:顯示記憶體/資源中的 HTML 內容 (無需實體檔案)

適用場景:HTML 內容加密、動態生成、避免臨時檔案。核心介面:IPersistStreamInit。

// 1. 導航至 about:blank 取得有效 Document 物件
m_ie.Navigate2(&CComVariant(_T("about:blank")), NULL, NULL, NULL, NULL);

// 2. 取得 IHTMLDocument2
CComPtr<IDispatch> spDoc = m_ie.GetDocument();
CComQIPtr<IPersistStreamInit, &IID_IPersistStreamInit> spPSI(spDoc);

// 3. 將 HTML 字串轉為 IStream
LPTSTR lpMem = (LPTSTR)::GlobalAlloc(GPTR, lstrlen(lpHtml) + 1);
lstrcpy(lpMem, lpHtml); // lpHtml 為你的 HTML 字串
CComPtr<IStream> spStream;
CreateStreamOnHGlobal(lpMem, TRUE, &spStream);

// 4. 載入並顯示
spPSI->InitNew();
spPSI->Load(spStream);

替代方案:res: 協議 — 將 HTML/圖片加入專案資源 (自訂資源類型 HTML),直接導航至 res://YourModule.dll/HTML_RESOURCE_NAME。RC 檔手工編輯範例:

HTML_TOWORD HTML DISCARDABLE "res\ToWord.htm"
~SEND_R1_C1.GIF HTML DISCARDABLE "res\~Send_r1_c1.gif"
LOGO.GIF    HTML DISCARDABLE "res\Logo.gif"

技巧二:屏蔽/自訂右鍵上下文菜單

實作 IDocHostUIHandler::ShowContextMenu,回傳 S_OK 即攔截預設菜單。ATL 實作較簡潔;MFC 需參考 Microsoft 範例程式碼 (文中已移植)。

技巧三:擴展 HTML 腳本的 external 物件

  1. 建立衍生自 CCmdTarget 的 Automation 類別 (勾選 Automation),用 ClassWizard 加入方法/屬性。
  2. 實作 IDocHostUIHandler::GetExternal 回傳該物件的 IDispatch。
  3. HTML 腳本即可呼叫 window.external.YourMethod()。

技巧四:顯示 HTML 樣式的模態/非模態對話框

呼叫 MSHTML.DLL 匯出函式 ShowHTMLDialogEx (VC6 需自行宣告):

HRESULT ShowHTMLDialogEx(
    HWND hwndParent,        // 父視窗
    IMoniker* pMk,          // URL 命名物件 (CreateURLMoniker 產生)
    DWORD dwDialogFlags,    // HTMLDLG_MODAL | HTMLDLG_NOUI 等
    VARIANT* pvarArgIn,     // 輸入參數 → 腳本取 window.dialogArguments
    WCHAR* pchOptions,      // 樣式字串 "dialogWidth:400px; dialogHeight:300px;"
    VARIANT* pvarArgOut     // 輸出參數 ← 腳本設 window.returnValue
);

關鍵旗標:HTMLDLG_NOUI — 不顯示對話框,僅載入 HTML 執行腳本 (配合技巧五)。

範例對話框 HTML (html_dlg.htm) 含表單輸入,使用者按確定後將資料回傳主程式。

技巧五:執行 HTML 腳本 (無 UI 模式)

呼叫 ShowHTMLDialogEx 並傳入 HTMLDLG_NOUI,即可載入 HTML 並執行其中腳本,不顯示視窗。範例腳本 (ToWord.htm):

<script language="VBScript">
On Error Resume Next
Set wordapp = CreateObject("Word.Application")
If Err.Number <> 0 Then
    MsgBox "未安裝 MS Word"
Else
    wordapp.Visible = True
    wordapp.Documents.Add "", False, 0
    wordapp.Selection.TypeText window.dialogArguments ' 接收主程式傳入文字
End If
window.close
</script>

串聯流程:主程式彈出 HTML 對話框 (技巧四) → 使用者輸入文字 → 按確定回傳 → 主程式呼叫 ShowHTMLDialogEx(HTMLDLG_NOUI) 執行 Word 自動化腳本 (技巧五)。

執行畫面

IE控件顯示記憶體HTML

HTML對話框

專案資源引入示意

展望與建議

  • 未來 UI 開發趨勢將轉向 XML (XAML/HTML5) 描述介面,程式設計師專注邏輯,美術設計師負責版面。
  • 建議儘早掌握 HTML/XML/DOM/JavaScript/VBScript 與 C++ 互操作技術,未來 2-3 年將極具競爭力。
  • VC6 使用者需手工補充 ShowHTMLDialogEx 宣告、常數與庫連結 (Urlmon.lib);VC.NET 已內建。

本文配套完整 VC6 範例專案可供下載。

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