Implementing Context Sensitivity in WinHelp and HTML Help
by Paul A. O’Rear of Helpful Solutions and Sageline Software
www.sageline.com pao@sageline.com
Example files will be posted at www.sageline.com
The Controversial Part...
What are we going to cover?
The Way Windows Works
Examples
DON’T JUST SIT THERE - DO SOMETHING!
What every help author should know about how Context Sensitive Help works
Five Common Context Sensitive Help Events
The Five Events and Their Corresponding Messages
So what messages does the developer need to handle?
Implementing Context Sensitive Help from the help author's perspective
WinHelp issues
HTML Help Issues
Include file tips
Food for thought...
Implementing Context Sensitive Help from the Programmer's Perspective
The Help Button
WinHelp(hwndBtn, "ourhelp.hlp", HELP_CONTEXT, IDH_THIS_DLG_OVERVIEW);
HtmlHelp(hwndBtn, "ourhelp.chm", HH_HELP_CONTEXT, IDH_THIS_DLG_OVERVIEW);
The F1 Key
1) Create a DWORD array of the control ids and help ids.
static DWORD ids[] = {
ID_SAVE, IDH_SAVE,
ID_DELETE, IDH_DELETE,
ID_COPY, IDH_COPY,
ID_PASTE, IDH_PASTE,
0, 0
};
2) Handle the WM_HELP message and call the WinHelp() or HtmlHelp() API functions casting the lParam value passed with the WM_HELP message as a pointer to a HELPINFO structure:
WinHelp(((LPHELPINFO) lParam)->hItemHandle, "ourhelp.hlp", HELP_WM_HELP, (DWORD)(LPVOID) dwArray);
HtmlHelp(((LPHELPINFO) lParam)->hItemHandle, "ourhelp.chm", HH_TP_HELP_WM_HELP, (DWORD)(LPVOID) dwArray);
The What's This (?) Button
The Right-Click What's This Context Menu
WinHelp((HWND)wParam, "ourhelp.hlp", HELP_CONTEXTMENU, (DWORD)(LPVOID) dwIDs);
HtmlHelp((HWND)wParam, "ourhelp.chm", HH_TP_HELP_CONTEXTMENU, (DWORD)(LPVOID) dwIDs);
The Shift + F1 What's This Functionality
Q&A