windows-nt/Source/XPSP1/NT/base/fs/utils/regedit/regstred.c
2020-09-26 16:20:57 +08:00

184 lines
5.1 KiB
C

/*******************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORP., 1993-1994
*
* TITLE: REGSTRED.C
*
* VERSION: 4.01
*
* AUTHOR: Tracy Sharpe
*
* DATE: 05 Mar 1994
*
* String edit dialog for use by the Registry Editor.
*
********************************************************************************
*
* CHANGE LOG:
*
* DATE REV DESCRIPTION
* ----------- --- -------------------------------------------------------------
* 05 Mar 1994 TCS Original implementation.
*
*******************************************************************************/
#include "pch.h"
#include "regresid.h"
#include "reghelp.h"
const DWORD s_EditStringValueHelpIDs[] = {
IDC_VALUEDATA, IDH_REGEDIT_VALUEDATA,
IDC_VALUENAME, IDH_REGEDIT_VALUENAME,
0, 0
};
BOOL
PASCAL
EditStringValue_OnInitDialog(
HWND hWnd,
HWND hFocusWnd,
LPARAM lParam
);
/*******************************************************************************
*
* EditStringValueDlgProc
*
* DESCRIPTION:
*
* PARAMETERS:
*
*******************************************************************************/
INT_PTR
CALLBACK
EditStringValueDlgProc(
HWND hWnd,
UINT Message,
WPARAM wParam,
LPARAM lParam
)
{
LPEDITVALUEPARAM lpEditValueParam;
switch (Message)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, EditStringValue_OnInitDialog);
case WM_COMMAND:
{
DWORD dwCommand = GET_WM_COMMAND_ID(wParam, lParam);
switch (dwCommand)
{
case IDOK:
{
UINT ccValueData;
UINT cbValueData;
PBYTE pbValueData = NULL;
lpEditValueParam = (LPEDITVALUEPARAM) GetWindowLongPtr(hWnd, DWLP_USER);
// this maybe a multi-string, if so the sizeof(TCHAR) is added to
// allow for the multi-string to be terminated also.
ccValueData = (UINT) SendDlgItemMessage(hWnd, IDC_VALUEDATA,
WM_GETTEXTLENGTH, 0, 0) + 2;
cbValueData = ccValueData * sizeof(TCHAR);
if (cbValueData > lpEditValueParam->cbValueData)
{
// need a bigger buffer
PBYTE pbValueData =
LocalReAlloc(lpEditValueParam->pValueData, cbValueData, LMEM_MOVEABLE);
if (!pbValueData)
{
InternalMessageBox(g_hInstance, hWnd, MAKEINTRESOURCE(IDS_EDITVALNOMEMORY),
MAKEINTRESOURCE(IDS_EDITVALERRORTITLE), MB_ICONERROR | MB_OK, NULL);
dwCommand = IDCANCEL;
}
else
{
lpEditValueParam->pValueData = pbValueData;
}
}
// sizeof(TCHAR) to remove multi-string null char from count
lpEditValueParam->cbValueData = cbValueData - sizeof(TCHAR);
GetDlgItemText(hWnd, IDC_VALUEDATA, (PTSTR)lpEditValueParam->
pValueData, lpEditValueParam->cbValueData - sizeof(TCHAR));
lpEditValueParam->pValueData[lpEditValueParam->cbValueData - sizeof(TCHAR)]
= TEXT('\0');
}
// FALL THROUGH
case IDCANCEL:
EndDialog(hWnd, dwCommand);
break;
}
}
break;
case WM_HELP:
WinHelp(((LPHELPINFO) lParam)-> hItemHandle, g_pHelpFileName,
HELP_WM_HELP, (ULONG_PTR) s_EditStringValueHelpIDs);
break;
case WM_CONTEXTMENU:
WinHelp((HWND) wParam, g_pHelpFileName, HELP_CONTEXTMENU,
(ULONG_PTR) s_EditStringValueHelpIDs);
break;
default:
return FALSE;
}
return TRUE;
}
/*******************************************************************************
*
* EditStringValue_OnInitDialog
*
* DESCRIPTION:
*
* PARAMETERS:
* hWnd, handle of EditStringValue window.
* hFocusWnd,
* lParam,
*
*******************************************************************************/
BOOL
PASCAL
EditStringValue_OnInitDialog(
HWND hWnd,
HWND hFocusWnd,
LPARAM lParam
)
{
LPEDITVALUEPARAM lpEditValueParam;
// Change maximum number of characters of the edit control, to its
// maximum limit (from 3000 characters to 4G characters).
SendDlgItemMessage( hWnd, IDC_VALUEDATA, EM_LIMITTEXT, 0, 0L );
SetWindowLongPtr(hWnd, DWLP_USER, lParam);
lpEditValueParam = (LPEDITVALUEPARAM) lParam;
SetDlgItemText(hWnd, IDC_VALUENAME, lpEditValueParam-> pValueName);
SetDlgItemText(hWnd, IDC_VALUEDATA, (PTSTR)lpEditValueParam-> pValueData);
return TRUE;
UNREFERENCED_PARAMETER(hFocusWnd);
}