//************************************************************* // File name: NAMES.C // // Description: Profile control panel applet // This file contains the source code for // "Computer Names" dialog box. // // Microsoft Confidential // Copyright (c) Microsoft Corporation 1992-1994 // All rights reserved // //************************************************************* #include #include "profile.h" //************************************************************* // // NamesDlgProc() // // Purpose: Dialog box procedure // // Parameters: HWND hDlg - Window handle of dialog box // UINT message - Window message // WPARAM wParam - WORD parameter // LPARAM lParam - LONG parameter // // // Return: (BOOL) TRUE if message was processed // FALSE if not // //************************************************************* INT_PTR CALLBACK NamesDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { TCHAR szNewName [MAX_COMPUTER_NAME]; LPTSTR lpNewName; BOOL bEnableAdd; switch (message) { case WM_INITDIALOG: // // Add the names to the list box. // ParseAndAddComputerNames(hDlg, IDD_NAMESLIST, glpList); // // Find out if anything was added to the list. // If so, then highlight the selected item. Otherwise, // disable the delete buttons. // if (SendDlgItemMessage (hDlg, IDD_NAMESLIST, LB_GETCOUNT, 0,0)) { SendDlgItemMessage (hDlg, IDD_NAMESLIST, LB_SETSEL, 1, lParam); } else { EnableWindow(GetDlgItem(hDlg, IDD_DELETE), FALSE); EnableWindow(GetDlgItem(hDlg, IDD_CLEARALL), FALSE); } // // Disable the "Add" button, and free the buffer. It will // be created again if the users presses the OK button. // EnableWindow (GetDlgItem(hDlg, IDD_ADD), FALSE); GlobalFree (glpList); // // Post ourselves a message so we can set the focus // appropriately. // PostMessage (hDlg, WM_USER+1, 0, 0); return TRUE; case WM_USER+1: // // Set the focus to the new computer name edit control // since most people will be starting from here. // SetFocus (GetDlgItem(hDlg, IDD_NEWNAME)); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDD_NEWNAME: // // Enable the Add button if appropriate. // if (HIWORD(wParam) == EN_UPDATE) { bEnableAdd = GetDlgItemText(hDlg, IDD_NEWNAME, szNewName, MAX_COMPUTER_NAME); EnableWindow (GetDlgItem (hDlg, IDD_ADD), bEnableAdd); if (bEnableAdd) { SetDefButton (hDlg, IDD_ADD); } else { SetDefButton (hDlg, IDOK); } } break; case IDD_ADD: // // Retrieve the new name from the edit control // GetDlgItemText(hDlg, IDD_NEWNAME, szNewName, MAX_COMPUTER_NAME); // // Check to see if the user entered the new computer // name with a \\ infront of it. If so, remove it. // lpNewName = szNewName; if ( (szNewName[0] == TEXT('\\')) && (szNewName[1] == TEXT('\\')) ) { lpNewName += 2; } // // Add the new name if it doesn't already exist. // if (SendDlgItemMessage (hDlg, IDD_NAMESLIST, LB_FINDSTRINGEXACT, 0, (LPARAM) lpNewName) == LB_ERR) { SendDlgItemMessage (hDlg, IDD_NAMESLIST, LB_ADDSTRING, 0, (LPARAM) lpNewName); } // // Erase the contents of the edit control, and set the // focus back to the edit control for quick entry of // names. // SetWindowText (GetDlgItem(hDlg, IDD_NEWNAME), NULL); SetFocus (GetDlgItem(hDlg, IDD_NEWNAME)); SetDefButton (hDlg, IDOK); // // Enable the delete buttons. // EnableWindow (GetDlgItem(hDlg, IDD_DELETE), TRUE); EnableWindow (GetDlgItem(hDlg, IDD_CLEARALL), TRUE); break; case IDD_DELETE: { INT iSel [MAX_NUM_COMPUTERS]; INT iCount, i; // // Retrieve an array of selected items. // iCount = (int)SendDlgItemMessage (hDlg, IDD_NAMESLIST, LB_GETSELITEMS, MAX_NUM_COMPUTERS, (LPARAM) iSel); if (iCount == LB_ERR) { break; } // // Now loop through the array and delete the items. // Note that we have to do this from the bottom up, // or the index's would be wrong as items are deleted // from the top of the list. // for (i = iCount-1; i >= 0; i--) { SendDlgItemMessage (hDlg, IDD_NAMESLIST, LB_DELETESTRING, iSel[i], 0); } // // Find out if anything is left in the list. // If not, then disable the delete buttons. // if (!SendDlgItemMessage (hDlg, IDD_NAMESLIST, LB_GETCOUNT, 0,0)) { EnableWindow(GetDlgItem(hDlg, IDD_DELETE), FALSE); EnableWindow(GetDlgItem(hDlg, IDD_CLEARALL), FALSE); } } break; case IDD_CLEARALL: // // User requested to empty the entire list. // SendDlgItemMessage (hDlg, IDD_NAMESLIST, LB_RESETCONTENT, 0, 0); EnableWindow(GetDlgItem(hDlg, IDD_DELETE), FALSE); EnableWindow(GetDlgItem(hDlg, IDD_CLEARALL), FALSE); break; case IDOK: { BOOL bFound; TCHAR szProfile[MAX_ERROR_MSG]; TCHAR szErrorMsg [MAX_ERROR_MSG]; // // Make sure the user doesn't still have a name // in the "New Name" field that he forgot to "add" // if (GetDlgItemText(hDlg, IDD_NEWNAME, szNewName, MAX_COMPUTER_NAME)) { LoadString (hInstance, IDS_NAME, szProfile, MAX_ERROR_MSG); LoadString (hInstance, IDS_ADDNAME, szErrorMsg, MAX_ERROR_MSG); if (MessageBox (hDlg, szErrorMsg, szProfile, MB_YESNO | MB_ICONQUESTION) == IDYES) { // // User would like to add the name before leaving. // Check to see if the user entered the new computer // name with a \\ infront of it. If so, remove it. // lpNewName = szNewName; if ( (szNewName[0] == TEXT('\\')) && (szNewName[1] == TEXT('\\')) ) { lpNewName += 2; } // // Check for duplicates first, then add the name // if it doesn't exist. // if (SendDlgItemMessage (hDlg, IDD_NAMESLIST, LB_FINDSTRINGEXACT, 0, (LPARAM) lpNewName) == LB_ERR) { SendDlgItemMessage (hDlg, IDD_NAMESLIST, LB_ADDSTRING, 0, (LPARAM) lpNewName); } } } // // Create the list of names to be passed back. // glpList = CreateList (hDlg, IDD_NAMESLIST, NULL, &bFound); EndDialog(hDlg, TRUE); return TRUE; } case IDCANCEL: // // Close the dialog box. // EndDialog(hDlg, FALSE); return TRUE; case IDD_NAMESHELP: // // User requested help // WinHelp (hDlg, szHelpFileName, HELP_CONTEXT, NAMES_HELP_CONTEXT); break; default: break; } break; default: // // User requested help via the F1 key. // if (message == uiShellHelp) { WinHelp (hDlg, szHelpFileName, HELP_CONTENTS, 0); } break; } return FALSE; } //************************************************************* // // SetDefButton() // // Purpose: Sets the default button // // Parameters: HWND hDlg - Window handle of dialog box // INT idButton - ID of button // // Return: void // //************************************************************* void SetDefButton(HWND hwndDlg, INT idButton) { LRESULT lr; if (HIWORD(lr = SendMessage(hwndDlg, DM_GETDEFID, 0, 0)) == DC_HASDEFID) { HWND hwndOldDefButton = GetDlgItem(hwndDlg, LOWORD(lr)); // // If we are setting the default button to the button which is // already default, then exit now. // if (LOWORD(lr) == idButton) { return; } SendMessage (hwndOldDefButton, BM_SETSTYLE, MAKEWPARAM(BS_PUSHBUTTON, 0), MAKELPARAM(TRUE, 0)); } SendMessage( hwndDlg, DM_SETDEFID, idButton, 0L ); SendMessage( GetDlgItem(hwndDlg, idButton), BM_SETSTYLE, MAKEWPARAM( BS_DEFPUSHBUTTON, 0 ), MAKELPARAM( TRUE, 0 )); }