/*++ 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 ); } }