|
|
#include "precomp.h"
#pragma hdrstop
// Globals to this module.
BOOL bHelpActive = fFalse; //SZ szHelpFile = NULL;
//DWORD dwLowContext = 0;
//DWORD dwHighContext = 0;
//DWORD dwHelpIndex = 0;
//BOOL bHelpIsIndexed = fFalse;
BOOL FInitWinHelpFile( HWND hWnd, SZ szHelpFileName, SZ szLowContext, SZ szHiContext, SZ szHelpIndex OPTIONAL ) {
//
// Check the parameters
//
AssertRet ( hWnd != (HWND)NULL && szHelpFileName != (SZ)NULL && szLowContext != (SZ)NULL && szHiContext != (SZ)NULL , fFalse );
//
// Check if there is another help file active and close it
//
FCloseWinHelp(hWnd);
//
// Store the parameters passed in
//
pLocalContext()->dwLowContext = atoi ( szLowContext ); pLocalContext()->dwHighContext = atoi ( szHiContext );
if ( pLocalContext()->dwHighContext < pLocalContext()->dwLowContext ) { return ( fFalse ); }
while ((pLocalContext()->szHelpFile = SzDupl(szHelpFileName )) == (SZ)NULL) { if (!FHandleOOM(hWnd)) { return(fFalse); } }
if ( szHelpIndex != (SZ)NULL ) { pLocalContext()->bHelpIsIndexed = fTrue; pLocalContext()->dwHelpIndex = atoi ( szHelpIndex ); } else { pLocalContext()->bHelpIsIndexed = fFalse; }
return ( fTrue ); }
BOOL FCloseWinHelp( HWND hWnd ) {
AssertRet ( hWnd != (HWND)NULL, fFalse );
//
// Find out if Help active and close the help file
//
if ( bHelpActive && pLocalContext()->szHelpFile != (SZ)NULL ) { WinHelp( hWnd, pLocalContext()->szHelpFile, HELP_QUIT, 0L ); } bHelpActive = fFalse;
//
// Free the helpfile string and clear the bHelpIsIndexed field
//
if ( pLocalContext()->szHelpFile != (SZ) NULL ) { SFree( pLocalContext()->szHelpFile ); pLocalContext()->szHelpFile = NULL; pLocalContext()->bHelpIsIndexed = fFalse; }
return ( fTrue );
}
BOOL FProcessWinHelp( HWND hWnd ) { SZ szHelpContext; DWORD dwHelpContext;
AssertRet ( hWnd != (HWND)NULL, fFalse );
//
// Check if winhelp file available
//
if ( pLocalContext()->szHelpFile == (SZ)NULL ) { return ( fFalse ); }
//
// Find the help context
//
if ((szHelpContext = SzFindSymbolValueInSymTab("HelpContext")) == (SZ)(NULL)) { return ( fFalse ); }
dwHelpContext = atoi ( szHelpContext );
//
// Validate it, see that it is within the two lo and hi contexts.
//
if ( dwHelpContext < pLocalContext()->dwLowContext || dwHelpContext > pLocalContext()->dwHighContext ) { return ( fFalse ); }
//
// Call Winhelp and set help active
//
bHelpActive = WinHelp( hWnd, pLocalContext()->szHelpFile, HELP_CONTEXT, dwHelpContext );
if ( !bHelpActive ) { WinHelp( hWnd, pLocalContext()->szHelpFile, HELP_QUIT, 0L ); return ( fFalse ); }
if ( pLocalContext()->bHelpIsIndexed == fTrue ) {
WinHelp( hWnd, pLocalContext()->szHelpFile, HELP_SETINDEX, pLocalContext()->dwHelpIndex ); }
return ( fTrue );
}
BOOL FProcessWinHelpMenu( HWND hWnd, WORD idcMenu ) {
AssertRet ( hWnd != (HWND)NULL && idcMenu != 0, fFalse );
//
// Check if winhelp file available
//
if ( pLocalContext()->szHelpFile == (SZ)NULL ) { return ( fFalse ); }
switch ( idcMenu ) {
case MENU_HELPINDEX:
if ( pLocalContext()->bHelpIsIndexed == fTrue ) {
bHelpActive = WinHelp( hWnd, pLocalContext()->szHelpFile, HELP_CONTEXT, pLocalContext()->dwHelpIndex ); } else {
bHelpActive = WinHelp( hWnd, pLocalContext()->szHelpFile, HELP_INDEX, 0 ); }
break;
case MENU_HELPSEARCH:
bHelpActive = WinHelp( hWnd, pLocalContext()->szHelpFile, HELP_PARTIALKEY, (ULONG_PTR)"" ); break;
case MENU_HELPONHELP:
bHelpActive = WinHelp( hWnd, pLocalContext()->szHelpFile, HELP_HELPONHELP, 0 );
default:
return ( fFalse );
}
if ( !bHelpActive ) { WinHelp( hWnd, pLocalContext()->szHelpFile, HELP_QUIT, 0L ); return ( fFalse ); }
if ( pLocalContext()->bHelpIsIndexed == fTrue ) {
WinHelp( hWnd, pLocalContext()->szHelpFile, HELP_SETINDEX, pLocalContext()->dwHelpIndex ); }
return ( fTrue );
}
|