在 VC 中使用 HTMLHELP (.chm) 幫助檔案
在我用VC呼叫了HTML Help之後,才發現用VC呼叫HTML Help並不是一件簡單的事。
在Visual C++ 6中呼叫HTML Help沒有現成的函式,需要呼叫HtmlHelp()這個API函式。而在呼叫這個函式之前,還需要在你的工程中加上HtmlHelp的庫和標頭檔案:
1. 指定HtmlHelp.h的路徑。選擇選單“Project -> Settings...”,開啟“Project Settings”對話方塊。選中“C/C++”選項卡,選擇“Category”列表框的內容為“Preprocesor”,在“Additional include directories”項中填入包含“HtmlHelp.h”這一檔案的路徑。這個檔案你可以在你的硬碟上找,如果你安裝了“HTML Help Workshop”,那麼在“HTML Help Workshop”程式目錄下有個“Include”目錄就是。
2. 指定HtmlHelp.lib的路徑。按照與前面類似的方法,選擇“Link”選項卡,選擇“Category”為“Input”,在“Additional library path”中填入包含“HtmlHelp.lib”檔案的路徑。同樣,在“HTML Help Workshop”程式目錄下的"Lib"目錄就是。
3. 指定Lib檔案。同樣在“Link”選項卡中,選擇“Category”為“General”,在“Object/librarie module”中填入“HtmlHelp.lib”。
4. 最後,將HtmlHelp.h包含在程式中。你可以選擇一個合適的位置加入“#include ”這一句話,但我建議你將這句話加入到“Stdafx.h”中。
注:以上所有內容在MSDN的“Including HTML Help Support Files in an Application”主題中均有介紹,在“搜尋”選項卡中輸入查詢內容為“HtmlHelp”即可找到該主題。
最後是大家都關心的問題,如何在程式中呼叫HTML Help。
如同在Visual Basic 6中使用HTML Help一樣,首先需要定位幫助檔案的位置。假如我們把幫助檔案(.chm)放在程式路徑下,那麼我們該如何去獲得程式路徑呢?程式大本營上是使用的API函式GetModuleFileName(),例如,我使用以下程式碼定位程式路徑和取檔案的完整路徑檔名:
CString appPath;
GetModuleFileName(NULL, appPath.GetBuffer(MAX_PATH), MAX_PATH);
//注:使用該API函式得到的是程式檔案完整路徑檔名,去掉檔名後才是路徑。
appPath.ReleaseBuffer();
int n = appPath.ReverseFind('/');
CString helpFile;
helpFile = appPath.Left(n);
TCHAR c = helpFile.GetAt(n - 1);
if(c == '/')
helpFile += "HtmlHelp.chm";
else
helpFile += "/HtmlHelp.chm";
通過HtmlHelp呼叫幫助檔案(.chm)的程式程式碼如下:
HtmlHelp(NULL, (LPCSTR)helpFile, HH_DISPLAY_TOPIC, 0);
//直接開啟幫助檔案的預設主題。
或
HtmlHelp(NULL, (LPCSTR)helpFile, HH_HELP_CONTEXT, 1);
//開啟其中一個主題,實現上下文相關的幫助呼叫。
如此,在Visual C++ 6中,你也能呼叫HtmlHelp了。這次可是用的API函式,也就是說,略為改動你就可以用於……