首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VS2010 MFC CHtmlView 列印預覽功能實作指南

     編輯:程式設計綜合問答

核心方案

CHtmlView 內部封裝 WebBrowser ActiveX 控制項,列印預覽需呼叫其 ExecWB 方法,而非覆寫 CView::OnPreparePrinting 等傳統 MFC 列印虛函數。

關鍵步驟

  1. 取得底層 IWebBrowser2 指標:GetHtmlDocument() 或 m_pBrowserApp。
  2. 呼叫 ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_DONTPROMPTUSER, ...)。
  3. 或使用 OLECMDID_PRINT 直接列印。

程式碼範例

void CMyHtmlView::OnFilePrintPreview() {
    // 確保已載入完成
    if (m_pBrowserApp == nullptr) return;

    // 方式一:直接呼叫 WebBrowser 的列印預覽
    VARIANT vIn = {VT_EMPTY}, vOut = {VT_EMPTY};
    HRESULT hr = m_pBrowserApp->ExecWB(
        OLECMDID_PRINTPREVIEW, 
        OLECMDEXECOPT_DONTPROMPTUSER | OLECMDEXECOPT_PROMPTUSER, 
        &vIn, &vOut
    );
    if (FAILED(hr)) {
        AfxMessageBox(_T("列印預覽失敗"));
    }
}

// 若需自訂頁眉/頁尾/邊距,需用 IWebBrowser2->put_RegisterAsBrowser/put_RegisterAsDropTarget
// 更細粒度控制參考:https://www.codeproject.com/Articles/967/WebBrowser-Control-How-to-Print-Preview

常見坑點

  • 文件未載入完成:在 OnDocumentComplete 後才能呼叫列印 API。
  • 權限問題:Vista+ 需管理員權限或調整 IE 保護模式。
  • 中文亂碼:確保網頁 charset=utf-8,列印模板亦為 UTF-8。

參考資源

別試圖用 CView 的列印架構去套 CHtmlView,走 ActiveX 原生介面才是正途。

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