windows-nt/Source/XPSP1/NT/base/ntsetup/legacy/dll/editproc.c
2020-09-26 16:20:57 +08:00

171 lines
5.2 KiB
C

#include "precomp.h"
#pragma hdrstop
/***************************************************************************/
/****************** Basic Class Dialog Handlers ****************************/
/***************************************************************************/
#define cchpMax 511
/*
** Purpose:
** Edit Dialog procedure for templates with exactly one edit control.
** Control IDs:
** The Edit control must have an id of IDC_EDIT1.
** Pushbuttons recognized are IDC_O, IDC_C, IDC_M, IDC_H, IDC_X, and IDC_B.
** Initialization:
** The symbol $(EditTextIn) is used to set the initial text in the Edit
** control. It is set to the empty string if the symbol is not found.
** The symbol $(EditFocus) is used to set what portion of the initial
** string is selected. Supported values are 'END' (default), 'ALL', or
** 'START'.
** Termination:
** The string in the Edit control is stored in the symbol $(EditTextOut).
** 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 FGstEditDlgProc(HWND hdlg,
UINT wMsg,
WPARAM wParam,
LPARAM lParam)
{
static WPARAM wSelStart = 0;
static WPARAM wSelEnd = 0;
CHP rgchNum[10];
CHP rgchText[cchpMax + 1];
SZ sz;
CCHP cchp;
Unused(lParam);
switch (wMsg)
{
case WM_INITDIALOG:
AssertDataSeg();
if( wMsg == WM_INITDIALOG ) {
FCenterDialogOnDesktop(hdlg);
}
cchp = cchpMax;
if ((sz = SzFindSymbolValueInSymTab("EditTextLim")) != (SZ)NULL)
cchp = (CCHP) atoi(sz);
SendDlgItemMessage(hdlg, IDC_EDIT1, EM_LIMITTEXT, cchp, 0L);
if ((sz = SzFindSymbolValueInSymTab("EditTextIn")) == (SZ)NULL)
sz = "";
Assert(sz != NULL);
SetDlgItemText(hdlg, IDC_EDIT1, (LPSTR)sz);
cchp = strlen(sz);
if ((sz = SzFindSymbolValueInSymTab("EditFocus")) == (SZ)NULL)
sz = "END";
/* default == END */
wSelStart = (WPARAM)cchp;
wSelEnd = (WPARAM)cchp;
if (CrcStringCompare(sz, "END") == crcEqual)
;
else if (CrcStringCompare(sz, "ALL") == crcEqual)
{
wSelStart = 0;
wSelEnd = INT_MAX;
}
else if (CrcStringCompare(sz, "START") == crcEqual)
{
wSelStart = 0;
wSelEnd = 0;
}
return(fTrue);
case STF_REINITDIALOG:
SetFocus( GetDlgItem(hdlg, IDC_EDIT1 ) );
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(LOWORD(wParam))
{
case IDC_EDIT1:
if (HIWORD(wParam) == EN_SETFOCUS)
SendDlgItemMessage(hdlg, IDC_EDIT1, EM_SETSEL, wSelStart,
wSelEnd);
else if (HIWORD(wParam) == EN_KILLFOCUS)
SendDlgItemMessage(hdlg, IDC_EDIT1, EM_GETSEL, (WPARAM)&wSelStart,
(LPARAM)&wSelEnd);
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_C:
case IDC_B:
case IDC_O:
case IDC_M:
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);
}
SendDlgItemMessage(hdlg, IDC_EDIT1, (WORD)WM_GETTEXT, cchpMax + 1,
(LPARAM)rgchText);
while (!FAddSymbolValueToSymTab("EditTextOut", rgchText))
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_EDIT_DLG_DESTROYED, 0, 0L);
DestroyWindow(hdlg);
return(fTrue);
}
return(fFalse);
}