windows-nt/Source/XPSP1/NT/shell/cpls/system/edtenvar.c

367 lines
8 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
Microsoft Confidential
Copyright (c) 1992-1997 Microsoft Corporation
All rights reserved
Module Name:
edtenvar.c
Abstract:
Implements the Edit Environment Variables dialog of the
System Control Panel Applet
Author:
Scott Hallock (scotthal) 11-Nov-1997
Revision History:
--*/
#include "sysdm.h"
//
// Global Variables
//
UINT g_VarType = INVALID_VAR_TYPE;
UINT g_EditType = INVALID_EDIT_TYPE;
TCHAR g_szVarName[BUFZ];
TCHAR g_szVarValue[BUFZ];
//
// Help IDs
//
DWORD aEditEnvVarsHelpIds[] = {
IDC_ENVVAR_EDIT_NAME_LABEL, (IDH_ENV_EDIT + 0),
IDC_ENVVAR_EDIT_NAME, (IDH_ENV_EDIT + 0),
IDC_ENVVAR_EDIT_VALUE_LABEL, (IDH_ENV_EDIT + 1),
IDC_ENVVAR_EDIT_VALUE, (IDH_ENV_EDIT + 1),
0, 0
};
//
// Function prototypes
//
BOOL
InitEnvVarsEdit(
IN HWND hDlg
);
BOOL
EnvVarsEditHandleCommand(
IN HWND hDlg,
IN WPARAM wParam,
IN LPARAM lParam
);
//
// Function implementation
//
INT_PTR
APIENTRY
EnvVarsEditDlg(
IN HWND hDlg,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
/*++
Routine Description:
Handles messages sent to the New.../Edit... dialog.
Arguments:
hDlg -
Supplies the window handle
uMsg -
Supplies the message being sent
wParam -
Supplies message parameter
lParam -
Supplies message parameter
Return Value:
TRUE if message was handled.
FALSE if message was unhandled.
--*/
{
BOOL fInitializing = FALSE;
switch (uMsg) {
case WM_INITDIALOG: {
BOOL fSuccess = FALSE;
fInitializing = TRUE;
fSuccess = InitEnvVarsEdit(hDlg);
if (!fSuccess) {
EndDialog(hDlg, EDIT_ERROR);
} // if
fInitializing = FALSE;
break;
} // case WM_INITDIALOG
case WM_COMMAND:
return EnvVarsEditHandleCommand(hDlg, wParam, lParam);
break;
case WM_HELP: // F1
WinHelp((HWND)((LPHELPINFO) lParam)->hItemHandle, HELP_FILE, HELP_WM_HELP, (DWORD_PTR) (LPSTR) aEditEnvVarsHelpIds);
break;
case WM_CONTEXTMENU: // right mouse click
WinHelp((HWND) wParam, HELP_FILE, HELP_CONTEXTMENU, (DWORD_PTR) (LPSTR) aEditEnvVarsHelpIds);
break;
default:
return(FALSE);
break;
} // switch (uMsg)
return(TRUE);
}
BOOL
InitEnvVarsEdit(
IN HWND hDlg
)
/*++
Routine Description:
Initializes the Edit Environment Variables dialog by placing initial
values into the text editing controls if necessary.
Arguments:
hDlg -
Supplies window handle
Return Value:
TRUE if successful
FALSE if an error occurs
--*/
{
TCHAR szCaption[EDIT_ENVVAR_CAPTION_LENGTH];
LRESULT fRetVal = FALSE;
INT nResult = 0;
ASSERT(INVALID_EDIT_TYPE != g_EditType);
ASSERT(INVALID_VAR_TYPE != g_VarType);
__try {
fRetVal = SendMessage(
GetDlgItem(hDlg, IDC_ENVVAR_EDIT_NAME),
EM_LIMITTEXT,
MAX_PATH - 1,
0
);
fRetVal = SendMessage(
GetDlgItem(hDlg, IDC_ENVVAR_EDIT_VALUE),
EM_LIMITTEXT,
MAX_VALUE_LEN - 1,
0
);
switch (g_EditType) {
//
// If this is to be a New.. dialog, we only need to
// load the proper capiton for the variable type
//
case NEW_VAR:
switch (g_VarType) {
case SYSTEM_VAR:
nResult = LoadString(
hInstance,
IDS_NEW_SYSVAR_CAPTION,
szCaption,
EDIT_ENVVAR_CAPTION_LENGTH
);
break;
case USER_VAR:
nResult = LoadString(
hInstance,
IDS_NEW_USERVAR_CAPTION,
szCaption,
EDIT_ENVVAR_CAPTION_LENGTH
);
break;
default:
__leave;
break;
} // switch (g_VarType)
//
// Set the focus to the "Name" field
// SetFocus() doesn't want to work here
//
PostMessage(
hDlg,
WM_NEXTDLGCTL,
(WPARAM) GetDlgItem(hDlg, IDC_ENVVAR_EDIT_NAME),
(LPARAM) TRUE
);
break;
//
// If this is to be an Edit.. dialog, then we need to load the
// proper caption and fill in initial values for the edit
// controls
//
case EDIT_VAR:
switch (g_VarType) {
case SYSTEM_VAR:
nResult = LoadString(
hInstance,
IDS_EDIT_SYSVAR_CAPTION,
szCaption,
EDIT_ENVVAR_CAPTION_LENGTH
);
break;
case USER_VAR:
nResult = LoadString(
hInstance,
IDS_EDIT_USERVAR_CAPTION,
szCaption,
EDIT_ENVVAR_CAPTION_LENGTH
);
break;
default:
__leave;
break;
} // switch (g_VarType)
SetDlgItemText(
hDlg,
IDC_ENVVAR_EDIT_NAME,
g_szVarName
);
SetDlgItemText(
hDlg,
IDC_ENVVAR_EDIT_VALUE,
g_szVarValue
);
//
// Set the focus to the "Value" field
// SetFocus() doesn't want to work here
//
PostMessage(
hDlg,
WM_NEXTDLGCTL,
(WPARAM) GetDlgItem(hDlg, IDC_ENVVAR_EDIT_VALUE),
(LPARAM) TRUE
);
break;
} // switch (g_EditType)
fRetVal = SendMessage(
GetDlgItem(hDlg, IDC_ENVVAR_EDIT_NAME),
EM_SETSEL,
0,
-1
);
fRetVal = SendMessage(
GetDlgItem(hDlg, IDC_ENVVAR_EDIT_VALUE),
EM_SETSEL,
0,
-1
);
fRetVal = SetWindowText(hDlg, szCaption);
} // __try
__finally {
//
// Nothing to clean up. __try is only there for __leave on
// failure capability.
//
} // __finally
return fRetVal ? TRUE : FALSE;
}
BOOL
EnvVarsEditHandleCommand(
IN HWND hDlg,
IN WPARAM wParam,
IN LPARAM lParam
)
/*++
Routine Description:
Handles WM_COMMAND messages sent to the Edit Environment Variables
dialog
Arguments:
hDlg -
Supplies window handle
wParam -
Supplies message parameter
lParam -
Supplies message parameter
Return Value:
TRUE if message was handled
FALSE if message was unhandled
--*/
{
switch (LOWORD(wParam)) {
case IDOK:
GetDlgItemText(
hDlg,
IDC_ENVVAR_EDIT_NAME,
g_szVarName,
BUFZ
);
GetDlgItemText(
hDlg,
IDC_ENVVAR_EDIT_VALUE,
g_szVarValue,
BUFZ
);
EndDialog(hDlg, EDIT_CHANGE);
break;
case IDCANCEL:
EndDialog(hDlg, EDIT_NO_CHANGE);
break;
default:
return(FALSE);
break;
} // switch (LOWORD(wParam))
return(TRUE);
}