VC++ 呼叫 CHM 必須使用 HtmlHelp (位於 htmlhelp.lib/htmlhelp.h):
HWND HtmlHelp(HWND hwndCaller, LPCSTR pszFile, UINT uCommand, DWORD_PTR dwData);
封裝類 CHMHelp 簡化呼叫:專案放入 CHMHelp.h/.cpp、CHMHelpID.h、AliasID.h 即可使用。
BOOL CDataDlg::OnInitDialog() {
CDialog::OnInitDialog();
SetWindowContextHelpId(IDH_WJH_0300702025); // 對應 CHM 主題 ID
return TRUE;
}
BOOL CMainFrame::OnHelpInfo(HELPINFO* pHelpInfo) {
HWND hWnd;
if (pHelpInfo->dwContextId > 0) { // 目前控制項/視窗有設定 ID
hWnd = HtmlHelp((HWND)pHelpInfo->hItemHandle,
theApp.m_szHelpFile, // CHM 檔路徑
HH_HELP_CONTEXT,
pHelpInfo->dwContextId);
} else { // 預設首頁
hWnd = HtmlHelp((HWND)pHelpInfo->hItemHandle,
theApp.m_szHelpFile,
HH_HELP_CONTEXT,
IDH_WJH_0100000000);
}
return (hWnd != NULL);
}
#define IDH_WJH_0000000000 0
#define IDH_WJH_0100000000 100000000
#define IDH_WJH_0100100000 100100000
#define IDH_WJH_0100101000 100101000
// ... 依功能模組分層編號
IDH_WJH_0000000000 = 用戶操作手冊.Content\000000000_操作手冊.Htm
IDH_WJH_0100000000 = 用戶操作手冊.Content\100000000_第一部分 系統介紹.Htm
IDH_WJH_0100100000 = 用戶操作手冊.Content\100100000_第一章 主要功能.Htm
IDH_WJH_0100101000 = 用戶操作手冊.Content\100101000_1、基本功能.Htm
[ALIAS]
#include "AliasID.h"
[MAP]
#include "CHMHelpID.h"
用 HTML Help Workshop 編譯產生 .chm。
Word2CHM:Word 文件依標題層級自動切割產生 HTML、自動生成 CHMHelpID.h、AliasID.h、.hhp,一鍵編譯 CHM。流程:
OnInitDialog 設定 SetWindowContextHelpIdOnHelpInfo 處理 HH_HELP_CONTEXTCHMHelpID.h 與 AliasID.h 嚴格同步更新.chm 至輸出目錄.chm 並註冊關聯 (可選)採用此架構,新增說明頁面只需修改 Word → 重新產生 → 重建專案,零手工維護對應關係。