要在对话框中提供上下文相关帮助,您必须创建一个由双字值对组成的数组。每对中的第一个值是对话框中的控件的标识符,第二个值是控件的帮助主题的上下文标识。阵列应包含对话框中每个控件的一对标识符。
对话框过程必须处理WM_HELP和WM_CONTEXTMENU消息。当用户单击鼠标右键时,当用户按F1键和WM_CONTEXTMENU时,对话框过程接收WM_HELP。
WM_HELP的【lParam的】参数是一个指向HELPINFO结构的指针。此结构的hItemHandle成员标识用户请求帮助的控件。您必须将句柄传递给WinHelp函数以及HELP_WM_HELP命令,帮助文件的名称以及指向标识符数组的指针。WinHelp函数在数组中搜索指定控件的控制标识符,然后检索相应的帮助上下文标识符。接下来,该函数将帮助上下文标识符传递给Windows帮助,Windows帮助将找到相应的主题,并将其显示在弹出窗口中。如果控件的标识符为-1,则系统搜索作为选项卡停止的下一个控件,并使用其标识符来查找帮助上下文标识符。因此,在资源文件中的控件之前放置静态文本很重要。
处理WM_CONTEXTMENU类似于在调用WinHelp函数时处理WM_HELP,有两个例外:
*您从WM_CONTEXTMENU传递【wParam中】参数,WM_CONTEXTMENU是发送消息的控件的句柄。
*您指定HELP_CONTEXTMENU命令而不是HELP_WM_HELP。
HELP_CONTEXTMENU命令使Windows帮助在显示帮助主题之前显示一个菜单。菜单是系统定义的。它允许用户显示控件的帮助或显示帮助主题对话框。
以下示例显示如何在对话框中实现上下文相关帮助。
LRESULT CALLBACK EditDlgProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,
LPARAM lParam)
{
//创建一个控制标识符和上下文标识符的数组。
static DWORD aIds[] = {
ID_SAVE, IDH_SAVE,
ID_DELETE, IDH_DELETE,
ID_COPY, IDH_COPY,
ID_PASTE, IDH_PASTE,
0,0
};
开关(uMsg){
case WM_HELP:
WinHelp(((LPHELPINFO)lParam) - > hItemHandle,“helpfile.hlp”,
HELP_WM_HELP, (DWORD) (LPSTR) aIds);
break;
case WM_CONTEXTMENU:
WinHelp((HWND))wParam,“helpfile.hlp”,HELP_CONTEXTMENU,
(DWORD) (LPVOID) aIds);
break;
.
. //在这里处理其他信息
.
}
return FALSE;
}