Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

187 lines
5.3 KiB

  1. /*******************************************************************************
  2. *
  3. * (C) COPYRIGHT MICROSOFT CORP., 1993-1994
  4. *
  5. * TITLE: REGSTRED.C
  6. *
  7. * VERSION: 4.01
  8. *
  9. * AUTHOR: Tracy Sharpe
  10. *
  11. * DATE: 05 Mar 1994
  12. *
  13. * String edit dialog for use by the Registry Editor.
  14. *
  15. ********************************************************************************
  16. *
  17. * CHANGE LOG:
  18. *
  19. * DATE REV DESCRIPTION
  20. * ----------- --- -------------------------------------------------------------
  21. * 05 Mar 1994 TCS Original implementation.
  22. *
  23. *******************************************************************************/
  24. #include "pch.h"
  25. #include "regresid.h"
  26. #include "reghelp.h"
  27. #include "regedit.h"
  28. const DWORD s_EditStringValueHelpIDs[] = {
  29. IDC_VALUEDATA, IDH_REGEDIT_VALUEDATA,
  30. IDC_VALUENAME, IDH_REGEDIT_VALUENAME,
  31. 0, 0
  32. };
  33. BOOL
  34. PASCAL
  35. EditStringValue_OnInitDialog(
  36. HWND hWnd,
  37. HWND hFocusWnd,
  38. LPARAM lParam
  39. );
  40. /*******************************************************************************
  41. *
  42. * EditStringValueDlgProc
  43. *
  44. * DESCRIPTION:
  45. *
  46. * PARAMETERS:
  47. *
  48. *******************************************************************************/
  49. INT_PTR
  50. CALLBACK
  51. EditStringValueDlgProc(
  52. HWND hWnd,
  53. UINT Message,
  54. WPARAM wParam,
  55. LPARAM lParam
  56. )
  57. {
  58. LPEDITVALUEPARAM lpEditValueParam;
  59. switch (Message)
  60. {
  61. HANDLE_MSG(hWnd, WM_INITDIALOG, EditStringValue_OnInitDialog);
  62. case WM_COMMAND:
  63. {
  64. DWORD dwCommand = GET_WM_COMMAND_ID(wParam, lParam);
  65. switch (dwCommand)
  66. {
  67. case IDOK:
  68. {
  69. UINT ccValueData;
  70. UINT cbValueData;
  71. PBYTE pbValueData = NULL;
  72. lpEditValueParam = (LPEDITVALUEPARAM) GetWindowLongPtr(hWnd, DWLP_USER);
  73. // this maybe a multi-string, if so the sizeof(TCHAR) is added to
  74. // allow for the multi-string to be terminated also.
  75. ccValueData = (UINT) SendDlgItemMessage(hWnd, IDC_VALUEDATA, WM_GETTEXTLENGTH, 0, 0) + 2;
  76. cbValueData = ccValueData * sizeof(TCHAR);
  77. if (cbValueData > lpEditValueParam->cbValueData)
  78. {
  79. // need a bigger buffer
  80. PBYTE pbValueData =
  81. LocalReAlloc(lpEditValueParam->pValueData, cbValueData, LMEM_MOVEABLE);
  82. if (!pbValueData)
  83. {
  84. InternalMessageBox(g_hInstance, hWnd, MAKEINTRESOURCE(IDS_EDITVALNOMEMORY),
  85. MAKEINTRESOURCE(IDS_EDITVALERRORTITLE), MB_ICONERROR | MB_OK, NULL);
  86. dwCommand = IDCANCEL;
  87. }
  88. else
  89. {
  90. lpEditValueParam->pValueData = pbValueData;
  91. }
  92. }
  93. // sizeof(TCHAR) to remove multi-string null char from count
  94. lpEditValueParam->cbValueData = cbValueData - sizeof(TCHAR);
  95. GetDlgItemText(hWnd, IDC_VALUEDATA, (PTSTR)lpEditValueParam->pValueData,
  96. lpEditValueParam->cbValueData/sizeof(TCHAR));
  97. }
  98. // FALL THROUGH
  99. case IDCANCEL:
  100. EndDialog(hWnd, dwCommand);
  101. break;
  102. }
  103. }
  104. break;
  105. case WM_HELP:
  106. WinHelp(((LPHELPINFO) lParam)-> hItemHandle, g_pHelpFileName,
  107. HELP_WM_HELP, (ULONG_PTR) s_EditStringValueHelpIDs);
  108. break;
  109. case WM_CONTEXTMENU:
  110. WinHelp((HWND) wParam, g_pHelpFileName, HELP_CONTEXTMENU,
  111. (ULONG_PTR) s_EditStringValueHelpIDs);
  112. break;
  113. default:
  114. return FALSE;
  115. }
  116. return TRUE;
  117. }
  118. /*******************************************************************************
  119. *
  120. * EditStringValue_OnInitDialog
  121. *
  122. * DESCRIPTION:
  123. *
  124. * PARAMETERS:
  125. * hWnd, handle of EditStringValue window.
  126. * hFocusWnd,
  127. * lParam,
  128. *
  129. *******************************************************************************/
  130. BOOL
  131. PASCAL
  132. EditStringValue_OnInitDialog(
  133. HWND hWnd,
  134. HWND hFocusWnd,
  135. LPARAM lParam
  136. )
  137. {
  138. LPEDITVALUEPARAM lpEditValueParam;
  139. // Change maximum number of characters of the edit control, to its
  140. // maximum limit (from 3000 characters to 4G characters).
  141. SendDlgItemMessage( hWnd, IDC_VALUEDATA, EM_LIMITTEXT, 0, 0L );
  142. SetWindowLongPtr(hWnd, DWLP_USER, lParam);
  143. lpEditValueParam = (LPEDITVALUEPARAM) lParam;
  144. if (lpEditValueParam->pValueName && lpEditValueParam->pValueName[0])
  145. {
  146. SetDlgItemText(hWnd, IDC_VALUENAME, lpEditValueParam->pValueName);
  147. }
  148. else
  149. {
  150. SetDlgItemText(hWnd, IDC_VALUENAME, g_RegEditData.pDefaultValue);
  151. }
  152. SetDlgItemText(hWnd, IDC_VALUEDATA, (PTSTR)lpEditValueParam-> pValueData);
  153. return TRUE;
  154. UNREFERENCED_PARAMETER(hFocusWnd);
  155. }