364 lines
4.2 KiB
C
364 lines
4.2 KiB
C
|
/*++
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
help.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Jaime Sasson - 10-Aug-1993
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
ULIB, Windows
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include "precomp.h"
|
|||
|
#pragma hdrstop
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Global variables used in the module
|
|||
|
//
|
|||
|
|
|||
|
HHOOK _hHook;
|
|||
|
INT _HelpContext;
|
|||
|
WCHAR _HelpFile[ MAX_PATH + 1 ];
|
|||
|
|
|||
|
|
|||
|
|
|||
|
LRESULT
|
|||
|
HelpHookProc(
|
|||
|
IN INT nCode,
|
|||
|
IN WPARAM wParam,
|
|||
|
IN LPARAM lParam
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Hook proc to detect F1 key presses.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
Standard arguments of a hook procedure.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
PMSG pmsg = (PMSG)lParam;
|
|||
|
|
|||
|
if(nCode < 0) {
|
|||
|
return( CallNextHookEx( _hHook, nCode, wParam, lParam ) );
|
|||
|
}
|
|||
|
|
|||
|
if(((nCode == MSGF_DIALOGBOX) || (nCode == MSGF_MENU))
|
|||
|
&& (pmsg->message == WM_KEYDOWN)
|
|||
|
&& (LOWORD(pmsg->wParam) == VK_F1))
|
|||
|
{
|
|||
|
PostMessage( _hWndMain, AP_HELP_KEY, nCode, 0);
|
|||
|
return(TRUE);
|
|||
|
}
|
|||
|
return(FALSE);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
InitializeHelp(
|
|||
|
IN PCWSTR HelpFile
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Initialize the help module by initializing its global data.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
HelpFile - Name of the help file to be invoked.
|
|||
|
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
BOOLEAN - Returns TRUE if the initialization succeeded.
|
|||
|
returns FALSE otherwise.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
|
|||
|
wcscpy( _HelpFile, HelpFile );
|
|||
|
|
|||
|
_hHook = SetWindowsHookEx( WH_MSGFILTER,
|
|||
|
HelpHookProc,
|
|||
|
NULL,
|
|||
|
GetCurrentThreadId() );
|
|||
|
|
|||
|
if( _hHook == NULL ) {
|
|||
|
return( FALSE );
|
|||
|
}
|
|||
|
return( TRUE );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
CleanUpHelp(
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Clean up the HELP object, by unhooking HelpHookProc.
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
UnhookWindowsHookEx( _hHook );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
DisplayHelp(
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Display context-sensitive help.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
BOOLEAN - Returns TRUE if the operation succeeds. Otherwise, return FALSE.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
if( _HelpContext != IDH_NONE ) {
|
|||
|
WinHelp( _hWndMain,
|
|||
|
_HelpFile,
|
|||
|
(UINT)HELP_CONTEXT,
|
|||
|
_HelpContext );
|
|||
|
DrawMenuBar( _hWndMain );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
DisplayHelpIndex(
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Invoke winhelp to display the help file index.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
WinHelp( _hWndMain, _HelpFile, (UINT)HELP_INDEX, 0 );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
DisplayHelpOnHelp(
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Invoke winhelp to display help on help.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
WinHelp( _hWndMain, _HelpFile, (UINT)HELP_HELPONHELP, 0 );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
DisplayHelpSearch(
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Invoke winhelp so that it prompt the user to enter a key.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
WinHelp( _hWndMain, _HelpFile, (UINT)HELP_PARTIALKEY, (DWORD)"" );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
QuitHelp(
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Inform winhelp that help is no more needed.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
WinHelp( _hWndMain, _HelpFile, (UINT)HELP_QUIT, 0 );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
INT
|
|||
|
GetHelpContext(
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Return the current help context.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
INT - Ireturns the current help id.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
return( _HelpContext );
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
SetHelpContext(
|
|||
|
IN INT HelpId
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Set the current help context.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
HelpContext - Help context id.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
_HelpContext = HelpId;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
SetMenuItemHelpContext(
|
|||
|
IN WPARAM wParam,
|
|||
|
IN LPARAM lParam
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Routine to set help context based on which menu item is currently
|
|||
|
selected.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
wParam,lParam - params to window proc in WM_MENUSELECT case
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
if(HIWORD(lParam) == 0) { // menu closed
|
|||
|
SetHelpContext( IDH_SAVE_REPAIR_INFO );
|
|||
|
|
|||
|
} else if (HIWORD(wParam) & MF_POPUP) { // popup selected
|
|||
|
SetHelpContext( IDH_NONE );
|
|||
|
|
|||
|
} else if (HIWORD(wParam) & MF_SYSMENU) { // system menu
|
|||
|
SetHelpContext( IDH_SYSTEM_MENU );
|
|||
|
|
|||
|
} else { // regular old menu item
|
|||
|
SetHelpContext( IDH_NONE );
|
|||
|
|
|||
|
}
|
|||
|
}
|