You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
338 lines
6.6 KiB
338 lines
6.6 KiB
/*++
|
|
|
|
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"<NONE, General Help>");
|
|
}
|
|
|
|
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);
|
|
}
|