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

MFC 顯示 Word 文檔內容:最佳方案

     編輯:程式設計綜合問答

需求

在 MFC 對話框程式中唯讀顯示 Word (.doc/.docx) 內容,包含表格、圖片、格式,不需編輯功能。

推薦方案:RichEdit 控件 + RTF 格式

  1. 將 Word 文檔另存為 RTF (Rich Text Format) 格式(Word 完美支援)。
  2. 在對話框資源編輯器中加入 Rich Edit Control (CRichEditCtrl),設定樣式為 Multi-line、Vertical Scroll、Read-only。
  3. 程式碼載入 RTF:
// 初始化 RichEdit 庫(僅需一次,通常在 CWinApp::InitInstance)
AfxInitRichEdit2(); // 或 AfxInitRichEdit()

// 在對話框 OnInitDialog 載入
void CMyDialog::OnInitDialog()
{
    CDialog::OnInitDialog();
    CRichEditCtrl& rich = m_richEdit; // DDX 綁定的控件
    rich.SetReadOnly(TRUE);
    
    // 方法 1:StreamIn 載入 RTF 檔案
    EDITSTREAM es = {0};
    es.dwCookie = (DWORD_PTR)&fileStream; // CFile 或 CStdioFile
    es.pfnCallback = MyStreamInCallback;
    rich.StreamIn(SF_RTF, es);
    
    // 方法 2:直接設定 RTF 文字(若內容較小)
    // CString rtf = LoadRtfFromFile(_T("doc.rtf"));
    // rich.SetWindowText(rtf); // 需配合 EM_STREAMIN 正確處理
}

替代方案比較

方案優點缺點適合場景
RichEdit + RTF原生 MFC、輕量、支援表格/圖片/基本排版複雜 Word 排版可能遺失唯讀顯示、文檔預覽
WebBrowser 控件 + HTML渲染保真度高(Word 存為 HTML)依賴 IE 內核、重、安全限制需高保真、可接受依賴
OLE 自動化 Word Application完美渲染、可編輯需安裝 Word、極慢、授權問題、進程殘留風險極少見、不推薦
第三方庫功能強大商業授權、體積大企業級文檔處理

關鍵提示

  • RichEdit 5.0 (`msftedit.dll`) 支援更多 RTF 標準,建議在 Manifest 中指定 Common Controls 6.0 並動態載入新版。
  • 大文件建議分頁載入或使用虛擬模式,避免 UI 凍結。
  • 若必須支援 .docx 且不想手動轉 RTF,可在伺服器端用 LibreOffice/Office Interop 預轉換。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved