在VC6.0中使用新一代幫助系統
發表于:2007-07-14來源:作者:點擊數:
標簽:
楊 倫--單 延 明--童 恒 建 ---- HTML Help Workshop 是Microsoft 比 較 新 的 開 發 工 具( 以 往 是WinHelp), 只 在VB 6.0 和VC 6.0 以 后 的 版本中支持,在其他 開發 工 具 中 怎 樣 使 用 未 見 報 道。 在VC 6.0 中 也 沒 有 說 明 怎 樣 設 計 菜 單
楊 倫--單 延 明--童 恒 建
---- HTML Help Workshop 是Microsoft 比 較 新 的 開 發 工 具( 以 往 是WinHelp), 只 在VB 6.0 和VC 6.0 以 后 的 版本中支持,在其他
開發 工 具 中 怎 樣 使 用 未 見 報 道。 在VC 6.0 中 也 沒 有 說 明 怎 樣 設 計 菜 單 上 下 文 敏 感 幫 助。 本 文 把 我 們 的 經 驗 介 紹 給 大 家, 相 信 大 家 只 要 使 用 就 會 喜 歡。
一、 在 應 用 程 序 中 包 含HTML Help 支 持 文 件
---- 1. 在 項 目 中 包 含htmlhelp.lib 庫 文 件
---- (1) 在Visual C++ 的 菜 單 欄 中, 選 擇"Project"*"Settings" 命 令, 彈 出"Settings" 對 話 框。
---- (2) 在"Settings" 對 話 框 中, 選 擇"Link" 選 項 卡, 然 后 在"category" 組 合 框 中 選 擇"Input"。
---- (3) 在"Additional library path" 編 輯 框 中, 指 定htmlhelp.lib 文 件 所 在 的 路 徑。
---- 2. 在 項 目 中 包 含htmlhelp.h 頭 文 件
---- (1) 打 開"Settings" 對 話 框。
---- (2) 在"Settings" 對 話 框 中, 選 擇"C/C++" 選 項 卡, 然 后 在"category" 組 合 框 中 選 擇"Preprocessor"。
---- (3) 在"Additional include directories" 編 輯 框 中, 指 定htmlhelp.h 文 件 所 在 的 路 徑。
---- 3. 在 項 目 中 加 入htmlhelp.lib 庫 文 件
---- (1) 打 開"Settings" 對 話 框。
---- (2) 在"Settings" 對 話 框 中, 選 擇"Link" 選 項 卡, 然 后 在"category" 組 合 框 中 選 擇"General"。
---- (3) 在"Object"*"libraries module" 編 輯 框 中, 加 入htmlhelp.lib 庫 文 件。
---- 4. 在 項 目 的stdafx.h 文 件 中 插 入 一 命 令 行
---- 插 入 的 命 令 行 為:
#include < htmlhelp.h >
---- 注: 當 使 用AppWizard 創 建 一 個MFC(.exe) 項 目 時, 在 第4 步 中 不 要 選 擇 上 下 文 敏 感 幫 助(Context-sensitive help) 校 驗 框。
二、 顯 示 幫 助
---- 只 要 在 您 想 顯 示 的 消 息 處 理( 菜 單 或 按 鈕) 函 數 中 調 用 這 個 函 數 即 可:HtmlHelp(NULL, "MsiHtml0716.chm::/welcome.htm", HH_DISPLAY_TOPIC, 0), 其"MsiHtml0716.chm" 是 編 譯 后 的 幫 助 文 件,"welcome.htm" 是 幫 助 系 統 的 主 頁。
三、 實 現 對 話 框 上 下 文 敏 感 幫 助
---- 1. 在 幫 助 項 目 中 創 建 上 下 文 敏 感 幫 助 文 本 文 件
---- 格 式 如 下:
.topic IDH_CHECK1
help text for control 1(IDC_CHECK1)
.topic IDH_CHECK2
help text for control 2(IDC_CHECK2)
---- 其 中IDH_CHECK1 和IDH_CHECK2 為 對 話 框 控 件 的 幫 助 主 題ID( 主 題 號 的 別 名)。
---- 2. 創 建 一 個2 維 數 組, 映 射 控 件ID 和 幫 助 主 題 號
---- 在 對 話 框 類 的*.cpp 文 件 中, 加 入 一 個2 維 數 組, 數 組 形 式 如 下:
static DWORD myarray[] = {
IDC_CHECK1, 1,
IDC_CHECK2, 2,
IDC_CHECK3, -1,
0,0
};
---- 其 中IDC_CHECK1 是 控 件 的ID,1 是 控 件 的 幫 助 主 題 號,-1 表 示 該 控 件 沒 有 幫 助, 數 組 的 最 后 一 對 是0 和0。
---- 3. 在 幫 助 項 目 中 創 建 一 個 頭 文 件, 映 射 主 題 號 和 主 題ID
#define IDH_CHECK1 1
#define IDH_CHECK2 2
---- 把 頭 文 件 和 文 本 文 件 添 加 到 幫 助 項 目 中, 具 體 詳 見VB 中 相 應 的 說 明。
---- 最 后 的 映 射 關 系 為:
---- 控 件 的ID < --(2 維 數 組)--> 幫 助 主 題 號< -- ( 頭 文 件) --> 主 題ID< --( 文 本 文 件)-- > 控 件 幫 助 正 文
---- 4. 實 現 鼠 標 右 鍵 觸 發" 這 是 什 么 ?" 幫 助
---- 在 對 話 框 類 中 加 入WM_CONTEXTMENU 消 息 的 處 理 函 數, 形 式 如 下:
void CMyDialog::OnContextMenu
(CWnd* pWnd,CPoint point)
{
HtmlHelp(
pWnd->GetSafeHwnd(),
"my_chm.chm::/ctrlhlp.txt",
HH_TP_HELP_CONTEXTMENU,
(DWORD)(LPVOID)myarray);
}
F1 a
clearcase/" target="_blank" >ccess to context-sensitive help means that users
will be able to press F1 when a control has focus to access help.
---- 5. 實 現F1 鍵 觸 發 上 下 文 敏 感 幫 助
---- 在 對 話 框 類 中 加 入WM_HELPINFO 消 息 的 處 理 函 數, 形 式 如 下:
BOOL CMyDialog::OnHelpInfo(HELPINFO* pHelpInfo)
{
if (pHelpInfo- >iContextType == HELPINFO_WINDOW)
{
return HtmlHelp(
(HWND)pHelpInfo- >hItemHandle,
"my_chm.chm::/ctrlhlp.txt",
HH_TP_HELP_WM_HELP,
(DWORD)(LPVOID)myarray)
!= NULL;
}
return TRUE;
}
---- 6. 實 現" 這 是 什 么 ?" 問 號 指 針 幫 助
---- 如 果 您 已 經 實 現F1 鍵 觸 發 上 下 文 敏 感 幫 助, 那 么 很 容 易 實 現 問 號 指 針 幫 助。 在 對 話 框 的 擴 展 風 格 中, 選 擇 上 下 文 敏 感 幫 助 校 驗 框, 使 小 問 號 圖 標 出 現 在 對 話 框 標 題 條 的 右 邊 即 可。
四、 實 現 菜 單 上 下 文 敏 感 幫 助
---- 1. 加 入WM_MENUSELECT 消 息 處 理 函 數
---- 這 樣 做 的 目 的 是 獲 取 上 下 文 敏 感 菜 單 的 標 志。
void CMainFrame::OnMenuSelect
( UINT nItemID, UINT nFlags, HMENU hSysMenu )
{
TRACE("CMainFrame::OnMenuSelect: nItemID=
%d,nFlags=%d,HMENU=%d%\n",nItemID,
nFlags,hSysMenu);
//when close menu or press ESC key or press F1 key outside
// the menu , please don't not assignment
if(nFlags!=0xFFFF && hSysMenu!=0)
m_nMenuItemIDOfContextHelp=nItemID;
CFrameWnd::OnMenuSelect(nItemID, nFlags, hSysMenu);
}
---- 2. 加 入WM_HELPINFO 消 息 處 理 函 數
---- 這 樣 的 目 的 是 獲 取F1 的 按 鍵 消 息, 實 現 菜 單 上 下 文 敏 感 幫 助。
BOOL CMainFrame::OnHelpInfo
(HELPINFO* pHelpInfo)
{
TRACE("CMainFrame::OnHelpInfo---
m_nMenuItemIDOfContextHelp=
%d\n",m_nMenuItemIDOfContextHelp);
switch(m_nMenuItemIDOfContextHelp)
{
case IDM_HtmlHelp:
HtmlHelp(NULL, "MsiHtml0716.chm::/zoom.htm",
HH_DISPLAY_TOPIC, 0);
m_nMenuItemIDOfContextHelp=0;
break;
case IDM_LOOKDLG:
HtmlHelp(NULL,"MsiHtml0716.chm::/
zoom11.htm", HH_DISPLAY_TOPIC, 0);
m_nMenuItemIDOfContextHelp=0;
break;
default:
HtmlHelp(NULL,"MsiHtml0716.chm::/
welcome.htm", HH_DISPLAY_TOPIC, 0);
}
return CMDIFrameWnd::OnHelpInfo(pHelpInfo);
}
---- 讀 者 朋 友 若 對 此 感 興 趣, 可 向 作 者(thj@cug.edu.cn) 索 要 完 整 的 源 程 序。
---- ( 作 者 地 址: 湖 北 武 漢 市 中 國 地 質 大 學 信 息 工 程 學 院 軟 件 教 研 室,430000)
原文轉自:http://www.anti-gravitydesign.com