195 lines
4.9 KiB
C
195 lines
4.9 KiB
C
#include "precomp.h"
|
|
#pragma hdrstop
|
|
/***************************************************************************/
|
|
/****************** Basic Class Dialog Handlers ****************************/
|
|
/***************************************************************************/
|
|
|
|
|
|
/*
|
|
** Purpose:
|
|
** Radio Button Group Dialog procedure for templates with one group
|
|
** of one to ten radio button controls.
|
|
** Control IDs:
|
|
** The Radio button 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 $(RadioDefault) is evaluated as an index (one-based) of
|
|
** the radio button to be set on. Default is 1.
|
|
** The symbol $(OptionsGreyed) is evaluated as a list of indexes
|
|
** (one-based) of radio buttons to be disabled (greyed). Default is
|
|
** none.
|
|
** Termination:
|
|
** The index of the currently selected radio button is stored in the
|
|
** symbol $(ButtonChecked). 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 FGstRadioDlgProc(HWND hdlg, UINT wMsg, WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
CHP rgchNum[10];
|
|
INT i, iButtonChecked;
|
|
static INT iButtonMax;
|
|
WORD idc;
|
|
SZ sz;
|
|
PSZ psz;
|
|
RGSZ rgsz;
|
|
|
|
Unused(lParam);
|
|
|
|
switch (wMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
AssertDataSeg();
|
|
if( wMsg == WM_INITDIALOG ) {
|
|
FCenterDialogOnDesktop(hdlg);
|
|
}
|
|
|
|
for (i = IDC_B1; i <= IDC_B10 && GetDlgItem(hdlg, i) != (HWND)NULL; i++)
|
|
;
|
|
iButtonMax = i - 1;
|
|
|
|
if ((sz = SzFindSymbolValueInSymTab("RadioDefault")) != (SZ)NULL)
|
|
{
|
|
iButtonChecked = atoi(sz);
|
|
if (iButtonChecked < 1)
|
|
iButtonChecked = 0;
|
|
if (iButtonChecked > 10)
|
|
iButtonChecked = 10;
|
|
}
|
|
else
|
|
iButtonChecked = 1;
|
|
|
|
if (iButtonChecked != 0)
|
|
SendDlgItemMessage(hdlg, IDC_B0 + iButtonChecked, BM_SETCHECK,1,0L);
|
|
|
|
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 && i != iButtonChecked)
|
|
EnableWindow(GetDlgItem(hdlg, IDC_B0 + i), 0);
|
|
else if (*sz != '\0')
|
|
PreCondition(fFalse, fTrue);
|
|
}
|
|
|
|
EvalAssert(FFreeRgsz(rgsz));
|
|
|
|
return(fTrue);
|
|
|
|
case STF_REINITDIALOG:
|
|
return(fTrue);
|
|
|
|
// case STF_DLG_ACTIVATE:
|
|
// case WM_MOUSEACTIVATE:
|
|
// if (FActiveStackTop())
|
|
// break;
|
|
// EvalAssert(FInactivateHelp());
|
|
// SetWindowPos(hdlg, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
|
// /* fall through */
|
|
// case STF_UILIB_ACTIVATE:
|
|
// EvalAssert(FActivateStackTop());
|
|
// return(fTrue);
|
|
|
|
case WM_CLOSE:
|
|
PostMessage(
|
|
hdlg,
|
|
WM_COMMAND,
|
|
MAKELONG(IDC_X, BN_CLICKED),
|
|
0L
|
|
);
|
|
return(fTrue);
|
|
|
|
case WM_COMMAND:
|
|
switch (idc = 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:
|
|
CheckRadioButton(hdlg, IDC_B1, iButtonMax, (INT)idc);
|
|
if (HIWORD(wParam) != BN_DOUBLECLICKED)
|
|
break;
|
|
wParam = IDC_C;
|
|
/* Fall through */
|
|
|
|
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);
|
|
}
|
|
|
|
iButtonChecked = 0;
|
|
for (i = 1; i <= 10; i++)
|
|
if (SendDlgItemMessage(hdlg, IDC_B0 + i, BM_GETCHECK, 0, 0L))
|
|
{
|
|
iButtonChecked = i;
|
|
break;
|
|
}
|
|
|
|
_itoa((INT)iButtonChecked, rgchNum, 10);
|
|
while (!FAddSymbolValueToSymTab("ButtonChecked", rgchNum))
|
|
if (!FHandleOOM(hdlg))
|
|
{
|
|
DestroyWindow(GetParent(hdlg));
|
|
return(fTrue);
|
|
}
|
|
|
|
PostMessage(GetParent(hdlg), (WORD)STF_UI_EVENT, 0, 0L);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case STF_DESTROY_DLG:
|
|
PostMessage(GetParent(hdlg), (WORD)STF_RADIO_DLG_DESTROYED, 0, 0L);
|
|
DestroyWindow(hdlg);
|
|
return(fTrue);
|
|
}
|
|
|
|
return(fFalse);
|
|
}
|