edtenvar.c
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 8k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. /*++
  2. Microsoft Confidential
  3. Copyright (c) 1992-1997  Microsoft Corporation
  4. All rights reserved
  5. Module Name:
  6.     edtenvar.c
  7. Abstract:
  8.     Implements the Edit Environment Variables dialog of the
  9.     System Control Panel Applet
  10. Author:
  11.     Scott Hallock (scotthal) 11-Nov-1997
  12. Revision History:
  13. --*/
  14. #include "sysdm.h"
  15. //
  16. // Global Variables
  17. //
  18. UINT g_VarType = INVALID_VAR_TYPE;
  19. UINT g_EditType = INVALID_EDIT_TYPE;
  20. TCHAR g_szVarName[BUFZ];
  21. TCHAR g_szVarValue[BUFZ];
  22. //
  23. // Help IDs
  24. //
  25. DWORD aEditEnvVarsHelpIds[] = {
  26.     IDC_ENVVAR_EDIT_NAME_LABEL,  (IDH_ENV_EDIT + 0),
  27.     IDC_ENVVAR_EDIT_NAME,        (IDH_ENV_EDIT + 0),
  28.     IDC_ENVVAR_EDIT_VALUE_LABEL, (IDH_ENV_EDIT + 1),
  29.     IDC_ENVVAR_EDIT_VALUE,       (IDH_ENV_EDIT + 1),
  30.     0, 0
  31. };
  32. //
  33. // Function prototypes
  34. //
  35. BOOL
  36. InitEnvVarsEdit(
  37.     IN HWND hDlg
  38. );
  39. BOOL
  40. EnvVarsEditHandleCommand(
  41.     IN HWND hDlg,
  42.     IN WPARAM wParam,
  43.     IN LPARAM lParam
  44. );
  45. //
  46. // Function implementation
  47. //
  48. INT_PTR
  49. APIENTRY
  50. EnvVarsEditDlg(
  51.     IN HWND hDlg,
  52.     IN UINT uMsg,
  53.     IN WPARAM wParam,
  54.     IN LPARAM lParam
  55. )
  56. /*++
  57. Routine Description:
  58.     Handles messages sent to the New.../Edit... dialog.
  59. Arguments:
  60.     hDlg -
  61.         Supplies the window handle
  62.     uMsg -
  63.         Supplies the message being sent
  64.     wParam -
  65.         Supplies message parameter
  66.     lParam -
  67.         Supplies message parameter
  68. Return Value:
  69.     TRUE if message was handled.
  70.     FALSE if message was unhandled.
  71. --*/
  72. {
  73.     BOOL fInitializing = FALSE;
  74.     switch (uMsg) {
  75.         case WM_INITDIALOG: {
  76.             BOOL fSuccess = FALSE;
  77.             fInitializing = TRUE;
  78.             fSuccess = InitEnvVarsEdit(hDlg);
  79.             if (!fSuccess) {
  80.                 EndDialog(hDlg, EDIT_ERROR);
  81.             } // if
  82.             fInitializing = FALSE;
  83.             break;
  84.         } // case WM_INITDIALOG
  85.         case WM_COMMAND:
  86.             return EnvVarsEditHandleCommand(hDlg, wParam, lParam);
  87.             break;
  88.         case WM_HELP:      // F1
  89.             WinHelp((HWND)((LPHELPINFO) lParam)->hItemHandle, HELP_FILE, HELP_WM_HELP, (DWORD_PTR) (LPSTR) aEditEnvVarsHelpIds);
  90.             break;
  91.     
  92.         case WM_CONTEXTMENU:      // right mouse click
  93.             WinHelp((HWND) wParam, HELP_FILE, HELP_CONTEXTMENU, (DWORD_PTR) (LPSTR) aEditEnvVarsHelpIds);
  94.             break;
  95.         default:
  96.             return(FALSE);
  97.             break;
  98.     } // switch (uMsg)
  99.     return(TRUE);
  100. }
  101. BOOL
  102. InitEnvVarsEdit(
  103.     IN HWND hDlg
  104. )
  105. /*++
  106. Routine Description:
  107.     Initializes the Edit Environment Variables dialog by placing initial
  108.     values into the text editing controls if necessary.
  109. Arguments:
  110.     hDlg -
  111.         Supplies window handle
  112. Return Value:
  113.     TRUE if successful
  114.     FALSE if an error occurs
  115. --*/
  116. {
  117.     TCHAR szCaption[EDIT_ENVVAR_CAPTION_LENGTH];
  118.     LRESULT fRetVal = FALSE;
  119.     INT  nResult = 0;
  120.     ASSERT(INVALID_EDIT_TYPE != g_EditType);
  121.     ASSERT(INVALID_VAR_TYPE != g_VarType);
  122.     __try {
  123.         fRetVal = SendMessage(
  124.             GetDlgItem(hDlg, IDC_ENVVAR_EDIT_NAME),
  125.             EM_LIMITTEXT,
  126.             MAX_PATH - 1,
  127.             0
  128.         );
  129.         fRetVal = SendMessage(
  130.             GetDlgItem(hDlg, IDC_ENVVAR_EDIT_VALUE),
  131.             EM_LIMITTEXT,
  132.             MAX_VALUE_LEN - 1,
  133.             0
  134.         );
  135.         switch (g_EditType) {
  136.             //
  137.             // If this is to be a New.. dialog, we only need to
  138.             // load the proper capiton for the variable type
  139.             //
  140.             case NEW_VAR:
  141.                 switch (g_VarType) {
  142.                     case SYSTEM_VAR:
  143.                         nResult = LoadString(
  144.                             hInstance,
  145.                             IDS_NEW_SYSVAR_CAPTION,
  146.                             szCaption,
  147.                             EDIT_ENVVAR_CAPTION_LENGTH
  148.                         );
  149.                         break;
  150.                     case USER_VAR:
  151.                         nResult = LoadString(
  152.                             hInstance,
  153.                             IDS_NEW_USERVAR_CAPTION,
  154.                             szCaption,
  155.                             EDIT_ENVVAR_CAPTION_LENGTH
  156.                         );
  157.                         break;
  158.                     default:
  159.                         __leave;
  160.                         break;
  161.                 } // switch (g_VarType)
  162.                 //
  163.                 // Set the focus to the "Name" field
  164.                 // SetFocus() doesn't want to work here
  165.                 //
  166.                 PostMessage(
  167.                     hDlg, 
  168.                     WM_NEXTDLGCTL,
  169.                     (WPARAM) GetDlgItem(hDlg, IDC_ENVVAR_EDIT_NAME),
  170.                     (LPARAM) TRUE
  171.                 );
  172.                 break;
  173.             //
  174.             // If this is to be an Edit.. dialog, then we need to load the
  175.             // proper caption and fill in initial values for the edit
  176.             // controls
  177.             //
  178.             case EDIT_VAR:
  179.                 switch (g_VarType) {
  180.                     case SYSTEM_VAR:
  181.                         nResult = LoadString(
  182.                             hInstance,
  183.                             IDS_EDIT_SYSVAR_CAPTION,
  184.                             szCaption,
  185.                             EDIT_ENVVAR_CAPTION_LENGTH
  186.                         );
  187.                         break;
  188.                      case USER_VAR:
  189.                         nResult = LoadString(
  190.                             hInstance,
  191.                             IDS_EDIT_USERVAR_CAPTION,
  192.                             szCaption,
  193.                             EDIT_ENVVAR_CAPTION_LENGTH
  194.                         );
  195.                         break;
  196.     
  197.                     default:
  198.                          __leave;
  199.                         break;
  200.                 } // switch (g_VarType)
  201.         
  202.                 SetDlgItemText(
  203.                     hDlg,
  204.                     IDC_ENVVAR_EDIT_NAME,
  205.                     g_szVarName
  206.                 );
  207.                 SetDlgItemText(
  208.                     hDlg,
  209.                     IDC_ENVVAR_EDIT_VALUE,
  210.                     g_szVarValue
  211.                 );
  212.                 //
  213.                 // Set the focus to the "Value" field
  214.                 // SetFocus() doesn't want to work here
  215.                 //
  216.                 PostMessage(
  217.                     hDlg, 
  218.                     WM_NEXTDLGCTL,
  219.                     (WPARAM) GetDlgItem(hDlg, IDC_ENVVAR_EDIT_VALUE),
  220.                     (LPARAM) TRUE
  221.                 );
  222.         
  223.                 break;
  224.         } // switch (g_EditType)
  225.         
  226.         fRetVal = SendMessage(
  227.             GetDlgItem(hDlg, IDC_ENVVAR_EDIT_NAME),
  228.             EM_SETSEL,
  229.             0,
  230.             -1
  231.         );
  232.         fRetVal = SendMessage(
  233.             GetDlgItem(hDlg, IDC_ENVVAR_EDIT_VALUE),
  234.             EM_SETSEL,
  235.             0,
  236.             -1
  237.         );
  238.         fRetVal = SetWindowText(hDlg, szCaption);
  239.     } // __try
  240.     __finally {
  241.         //
  242.         // Nothing to clean up.  __try is only there for __leave on
  243.         // failure capability.
  244.         //
  245.     } // __finally
  246.     return fRetVal ? TRUE : FALSE;
  247. }
  248. BOOL
  249. EnvVarsEditHandleCommand(
  250.     IN HWND hDlg,
  251.     IN WPARAM wParam,
  252.     IN LPARAM lParam
  253. )
  254. /*++
  255. Routine Description:
  256.     Handles WM_COMMAND messages sent to the Edit Environment Variables
  257.     dialog
  258. Arguments:
  259.     hDlg -
  260.         Supplies window handle
  261.     wParam -
  262.         Supplies message parameter
  263.     lParam -
  264.         Supplies message parameter
  265. Return Value:
  266.     TRUE if message was handled
  267.     FALSE if message was unhandled
  268. --*/
  269. {
  270.     switch (LOWORD(wParam)) {
  271.         case IDOK:
  272.             GetDlgItemText(
  273.                 hDlg,
  274.                 IDC_ENVVAR_EDIT_NAME,
  275.                 g_szVarName,
  276.                 BUFZ
  277.             );
  278.             GetDlgItemText(
  279.                 hDlg,
  280.                 IDC_ENVVAR_EDIT_VALUE,
  281.                 g_szVarValue,
  282.                 BUFZ
  283.             );
  284.             EndDialog(hDlg, EDIT_CHANGE);
  285.             break;
  286.         case IDCANCEL:
  287.             EndDialog(hDlg, EDIT_NO_CHANGE);
  288.             break;
  289.         default:
  290.             return(FALSE);
  291.             break;
  292.     } // switch (LOWORD(wParam))
  293.     return(TRUE);
  294. }