/******************************************************************************* * * (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); }