219 lines
6.7 KiB
C
219 lines
6.7 KiB
C
|
#include "precomp.h"
|
||
|
#pragma hdrstop
|
||
|
/***************************************************************************/
|
||
|
/****************** Basic Class Dialog Handlers ****************************/
|
||
|
/***************************************************************************/
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Purpose:
|
||
|
** CheckBox Dialog procedure for templates with one to ten checkbox
|
||
|
** controls.
|
||
|
** Control IDs:
|
||
|
** The Checkbox controls must have sequential ids starting with IDC_B1
|
||
|
** and working up to a maximum of IDC_B10.
|
||
|
** Pushbuttons recognized are IDC_O, IDC_C, IDC_M, IDC_H, IDC_X, and IDC_B.
|
||
|
** Initialization:
|
||
|
** The symbol $(CheckItemsIn) is evaluated as a list of elements of
|
||
|
** either 'ON' or 'OFF'. So examples for a template with four
|
||
|
** checkbox controls would include {ON, ON, ON, ON},
|
||
|
** {ON, OFF, ON, OFF} and {OFF, OFF, OFF, OFF}. These elements
|
||
|
** determine if the initial state of the corresponding checkbox
|
||
|
** control is checked (ON) or unchecked (OFF). If there are more
|
||
|
** controls than elements, the extra controls will be initialized
|
||
|
** as unchecked. If there are more elements than controls, the
|
||
|
** extra elements are ignored.
|
||
|
** The symbol $(OptionsGreyed) is evaluated as a list of indexes
|
||
|
** (one-based) of check boxes to be disabled (greyed). Default is
|
||
|
** none.
|
||
|
** Termination:
|
||
|
** The state of each checkbox is queried and a list with the same format
|
||
|
** as the initialization list is created and stored in the symbol
|
||
|
** $(CheckItemsOut).
|
||
|
** The id of the Pushbutton (eg IDC_C) which caused termination is
|
||
|
** converted to a string and stored in the symbol $(ButtonPressed).
|
||
|
**
|
||
|
*****************************************************************************/
|
||
|
INT_PTR APIENTRY FGstCheckDlgProc(HWND hdlg,
|
||
|
UINT wMsg,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
CHP rgchNum[10];
|
||
|
WORD idc;
|
||
|
RGSZ rgsz;
|
||
|
PSZ psz;
|
||
|
SZ sz;
|
||
|
|
||
|
Unused(lParam);
|
||
|
|
||
|
switch (wMsg) {
|
||
|
case STF_REINITDIALOG:
|
||
|
return(fTrue);
|
||
|
|
||
|
case WM_INITDIALOG:
|
||
|
AssertDataSeg();
|
||
|
|
||
|
if( wMsg == WM_INITDIALOG ) {
|
||
|
FCenterDialogOnDesktop(hdlg);
|
||
|
}
|
||
|
|
||
|
if ((sz = SzFindSymbolValueInSymTab("CheckItemsIn")) == (SZ)NULL)
|
||
|
{
|
||
|
PreCondition(fFalse, fTrue);
|
||
|
return(fTrue);
|
||
|
}
|
||
|
|
||
|
while ((psz = rgsz = RgszFromSzListValue(sz)) == (RGSZ)NULL)
|
||
|
if (!FHandleOOM(hdlg))
|
||
|
{
|
||
|
DestroyWindow(GetParent(hdlg));
|
||
|
return(fTrue);
|
||
|
}
|
||
|
|
||
|
idc = IDC_B1;
|
||
|
while (*psz != (SZ)NULL)
|
||
|
{
|
||
|
WORD wCheck = 0;
|
||
|
|
||
|
if (CrcStringCompare(*(psz++), "ON") == crcEqual)
|
||
|
wCheck = 1;
|
||
|
CheckDlgButton(hdlg, idc++, wCheck);
|
||
|
}
|
||
|
|
||
|
EvalAssert(FFreeRgsz(rgsz));
|
||
|
|
||
|
if ((sz = SzFindSymbolValueInSymTab("OptionsGreyed")) == (SZ)NULL)
|
||
|
{
|
||
|
PreCondition(fFalse, fTrue);
|
||
|
return(fTrue);
|
||
|
}
|
||
|
|
||
|
while ((psz = rgsz = RgszFromSzListValue(sz)) == (RGSZ)NULL)
|
||
|
if (!FHandleOOM(hdlg))
|
||
|
{
|
||
|
DestroyWindow(GetParent(hdlg));
|
||
|
return(fTrue);
|
||
|
}
|
||
|
|
||
|
while (*psz != (SZ)NULL)
|
||
|
{
|
||
|
SZ sz = *(psz++);
|
||
|
INT i = atoi(sz);
|
||
|
|
||
|
if (i > 0 && i <= 10)
|
||
|
EnableWindow(GetDlgItem(hdlg, IDC_B0 + i), 0);
|
||
|
else if (*sz != '\0')
|
||
|
PreCondition(fFalse, fTrue);
|
||
|
}
|
||
|
|
||
|
EvalAssert(FFreeRgsz(rgsz));
|
||
|
return(fTrue);
|
||
|
|
||
|
|
||
|
case WM_CLOSE:
|
||
|
PostMessage(
|
||
|
hdlg,
|
||
|
WM_COMMAND,
|
||
|
MAKELONG(IDC_X, BN_CLICKED),
|
||
|
0L
|
||
|
);
|
||
|
return(fTrue);
|
||
|
|
||
|
case WM_COMMAND:
|
||
|
switch (LOWORD(wParam))
|
||
|
{
|
||
|
case IDC_B1:
|
||
|
case IDC_B2:
|
||
|
case IDC_B3:
|
||
|
case IDC_B4:
|
||
|
case IDC_B5:
|
||
|
case IDC_B6:
|
||
|
case IDC_B7:
|
||
|
case IDC_B8:
|
||
|
case IDC_B9:
|
||
|
case IDC_B10:
|
||
|
CheckDlgButton(hdlg, LOWORD(wParam),
|
||
|
(UINT)!IsDlgButtonChecked(hdlg, (UINT)wParam));
|
||
|
break;
|
||
|
|
||
|
case IDCANCEL:
|
||
|
if (LOWORD(wParam) == IDCANCEL) {
|
||
|
|
||
|
if (!GetDlgItem(hdlg, IDC_B) || HIWORD(GetKeyState(VK_CONTROL)) || HIWORD(GetKeyState(VK_SHIFT)) || HIWORD(GetKeyState(VK_MENU)))
|
||
|
{
|
||
|
break;
|
||
|
}
|
||
|
wParam = IDC_B;
|
||
|
|
||
|
}
|
||
|
case IDC_O:
|
||
|
case IDC_C:
|
||
|
case IDC_M:
|
||
|
case IDC_B:
|
||
|
case IDC_X:
|
||
|
case IDC_BTN0:
|
||
|
case IDC_BTN1: case IDC_BTN2: case IDC_BTN3:
|
||
|
case IDC_BTN4: case IDC_BTN5: case IDC_BTN6:
|
||
|
case IDC_BTN7: case IDC_BTN8: case IDC_BTN9:
|
||
|
_itoa((INT)wParam, rgchNum, 10);
|
||
|
while (!FAddSymbolValueToSymTab("ButtonPressed", rgchNum))
|
||
|
if (!FHandleOOM(hdlg))
|
||
|
{
|
||
|
DestroyWindow(GetParent(hdlg));
|
||
|
return(fTrue);
|
||
|
}
|
||
|
|
||
|
while ((psz = rgsz = (RGSZ)SAlloc((CB)(11 * sizeof(SZ)))) ==
|
||
|
(RGSZ)NULL)
|
||
|
if (!FHandleOOM(hdlg))
|
||
|
{
|
||
|
DestroyWindow(GetParent(hdlg));
|
||
|
return(fTrue);
|
||
|
}
|
||
|
|
||
|
for (idc = IDC_B1; GetDlgItem(hdlg, idc); psz++, idc++)
|
||
|
{
|
||
|
BOOL fChecked = IsDlgButtonChecked(hdlg, idc);
|
||
|
|
||
|
while ((*psz = SzDupl(fChecked ? "ON" : "OFF")) == (SZ)NULL)
|
||
|
if (!FHandleOOM(hdlg))
|
||
|
{
|
||
|
DestroyWindow(GetParent(hdlg));
|
||
|
return(fTrue);
|
||
|
}
|
||
|
}
|
||
|
*psz = (SZ)NULL;
|
||
|
|
||
|
while ((sz = SzListValueFromRgsz(rgsz)) == (SZ)NULL)
|
||
|
if (!FHandleOOM(hdlg))
|
||
|
{
|
||
|
DestroyWindow(GetParent(hdlg));
|
||
|
return(fTrue);
|
||
|
}
|
||
|
while (!FAddSymbolValueToSymTab("CheckItemsOut", sz))
|
||
|
if (!FHandleOOM(hdlg))
|
||
|
{
|
||
|
DestroyWindow(GetParent(hdlg));
|
||
|
return(fTrue);
|
||
|
}
|
||
|
|
||
|
SFree(sz);
|
||
|
EvalAssert(FFreeRgsz(rgsz));
|
||
|
PostMessage(GetParent(hdlg), (WORD)STF_UI_EVENT, 0, 0L);
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case STF_DESTROY_DLG:
|
||
|
PostMessage(GetParent(hdlg), (WORD)STF_CHECK_DLG_DESTROYED, 0, 0L);
|
||
|
DestroyWindow(hdlg);
|
||
|
return(fTrue);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
return(fFalse);
|
||
|
}
|