/*++ Copyright (c) 1990-1995 Microsoft Corporation Module Name: help.c Abstract: This module contains function when user hit help button or F1 Author: 28-Aug-1995 Mon 14:55:07 created -by- Daniel Chou (danielc) [Environment:] NT Windows - Common Printer Driver UI DLL. [Notes:] Revision History: --*/ #include "precomp.h" #pragma hdrstop #define DBG_CPSUIFILENAME DbgHelp #define DBG_HELP_MSGBOX 0x00000001 DEFINE_DBGVAR(0); extern HINSTANCE hInstDLL; WCHAR CPSUIHelpFile[] = L"compstui.hlp"; #define MAX_HELPFILE_SIZE 300 #define TMP_HELP_WND_ID 0x7fff #if DBG INT HelpMsgBox( HWND hDlg, PTVWND pTVWnd, LPTSTR pHelpFile, POPTITEM pItem, UINT HelpIdx ) /*++ Routine Description: Arguments: Return Value: Author: 26-Sep-1995 Tue 13:20:25 created -by- Daniel Chou (danielc) Revision History: --*/ { UINT Count; UINT Style; GSBUF_DEF(pItem, 360); if (DbgHelp & DBG_HELP_MSGBOX) { if (pHelpFile) { Style = MB_ICONINFORMATION | MB_OKCANCEL; GSBUF_GETSTR(L"HelpFile="); GSBUF_GETSTR(pHelpFile); GSBUF_GETSTR(L"\nOption="); } else { GSBUF_GETSTR(L"HelpFile= -None-\nOption="); Style = MB_ICONSTOP | MB_OK; } if ((pItem) && (HelpIdx)) { GSBUF_GETSTR(pItem->pName); GSBUF_GETSTR(L"HelpIdx="); GSBUF_ADDNUM(HelpIdx, FALSE); } else { GSBUF_GETSTR(L""); } return(MessageBox(hDlg, GSBUF_BUF, TEXT("DBG: Common Property Sheet UI"), Style)); } else { return(TRUE); } } #endif BOOL CommonPropSheetUIHelp( HWND hDlg, PTVWND pTVWnd, HWND hWndHelp, DWORD MousePos, POPTITEM pItem, UINT HelpCmd ) /*++ Routine Description: This function initialize/display/end the plotter help system Arguments: hDlg - Handle to the dialog box need help pTVWnd - Our instance data hWndHelp - the window cause the context help MousePos - Mouse position where the right click happened x=LOWORD(MousePos), y=HIWORD(MousePos) pItem - Pointer to the OPTITEM for the context help HelpCmd - Help type Return Value: VOID Author: 28-Aug-1995 Mon 15:24:27 updated -by- Daniel Chou (danielc)w Revision History: --*/ { LPWSTR pHelpFile = NULL; DWORD HelpIdx; BOOL Ok = FALSE; GSBUF_DEF(pItem, MAX_HELPFILE_SIZE); if (pItem) { if (HelpIdx = (DWORD)_OI_HELPIDX(pItem)) { if (!LoadString(hInstDLL, IDS_INT_CPSUI_HELPFILE, pHelpFile = GSBUF_BUF, MAX_HELPFILE_SIZE)) { pHelpFile = CPSUIHelpFile; } } else if (GSBUF_GETSTR(_OI_PHELPFILE(pItem))) { pHelpFile = GSBUF_BUF; HelpIdx = pItem->HelpIndex; } } if ((!pHelpFile) && (GSBUF_GETSTR(pTVWnd->ComPropSheetUI.pHelpFile))) { pHelpFile = GSBUF_BUF; HelpIdx = 0; } /* * Quite easy - simply call the WinHelp function with the parameters * supplied to us. If this fails, then put up a stock dialog box. * BUT the first time we figure out what the file name is. We know * the actual name, but we don't know where it is located, so we * need to call the spooler for that information. */ if (pHelpFile) { HWND hWndTmp; POINT pt; DWORD HelpID[4]; ULONG_PTR Data; CPSUIDBGBLK( { if (HelpMsgBox(hDlg, pTVWnd, pHelpFile, pItem, HelpIdx) == IDCANCEL) { return(TRUE); } }) // // Try to pop-up help on the right click position, where we will create // a temp button window and do the help, this way we can do context // sensitive help on any type of window (static, icon) and even it is // disabled. We need to destroy this temp window before we exit from // this fucntion // pt.x = LOWORD(MousePos); pt.y = HIWORD(MousePos); ScreenToClient(hDlg, &pt); if (hWndTmp = CreateWindowEx(WS_EX_NOPARENTNOTIFY | WS_EX_CONTEXTHELP, L"button", L"", WS_CHILD | BS_CHECKBOX, pt.x, pt.y, 1, 1, hDlg, (HMENU)TMP_HELP_WND_ID, hInstDLL, 0)) { hWndHelp = hWndTmp; } else { CPSUIERR(("CommonPropSheetUIHelp: Create temp. help window failed")); } HelpID[0] = (hWndHelp) ? (DWORD)GetWindowLongPtr(hWndHelp, GWLP_ID) : 0; HelpID[1] = HelpIdx; HelpID[2] = HelpID[3] = 0; switch (HelpCmd) { case HELP_WM_HELP: if ((!HelpID[0]) || (!HelpID[1])) { HelpCmd = HELP_CONTENTS; hWndHelp = hDlg; Data = 0; break; } case HELP_CONTEXTMENU: SetWindowContextHelpId(hWndHelp, HelpID[1]); Data = (ULONG_PTR)&HelpID[0]; break; case HELP_CONTEXT: case HELP_CONTEXTPOPUP: Data = (ULONG_PTR)HelpID[1]; break; default: Data = 0; break; } CPSUIINT(("Help: hWnd=%08lx, Cmd=%ld, ID=[%ld, %ld]", hWndHelp, HelpCmd, HelpID[0], HelpID[1])); Ok = WinHelp(hWndHelp, pHelpFile, HelpCmd, Data); if (hWndTmp) { DestroyWindow(hWndTmp); } } else { CPSUIDBGBLK({ HelpMsgBox(hDlg, pTVWnd, NULL, pItem, HelpIdx); }) } return(Ok); }