//********************************************************************* //* Microsoft Windows ** //* Copyright(c) Microsoft Corp., 1993 ** //********************************************************************* #include "admincfg.h" HWND hwndMain=NULL; HWND hwndUser=NULL; BOOL OnCreate(HWND hWnd); BOOL OnInit(HWND hWnd); VOID OnDestroy(HWND hWnd); VOID ProcessMouseDown(HWND hwndParent,HWND hwndTree); VOID ProcessMouseUp(HWND hwndParent,HWND hwndTree); VOID ProcessMouseMove(HWND hwndParent,HWND hwndTree); VOID CheckMenuItems(HWND hwndApp); DWORD dwAppState = 0; BOOL fNetworkInstalled = 0; TCHAR szDatFilename[MAX_PATH+1]=TEXT(""); TCHAR szDlgModeUserName[USERNAMELEN+1]; extern HGLOBAL hClipboardUser; /******************************************************************* NAME: WndProc SYNOPSIS: Window proc for main window ********************************************************************/ LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) { int wmId, wmEvent; switch (message) { case WM_COMMAND: // message: command from application menu wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); if (wmId >= IDM_FILEHISTORY && wmId < IDM_FILEHISTORY + FILEHISTORY_COUNT) { MENUITEMINFO mii; TCHAR szFilename[MAX_PATH+1]; mii.dwTypeData = szFilename; mii.cch = ARRAYSIZE(szFilename); // this is a file menu shortcut with a filename, try // to open if (!(dwAppState & AS_CANHAVEDOCUMENT)) return FALSE; mii.cbSize = sizeof(mii); mii.fMask = MIIM_TYPE; mii.wID = wmId; if (GetMenuItemInfo(GetSubMenu(GetMenu(hWnd),0), wmId,FALSE,&mii)) { if (!lstrlen(szFilename)) return FALSE; if (dwAppState & AS_FILEDIRTY) { if (!QueryForSave(hWnd,hwndUser)) return TRUE; // user cancelled } // open the file OnOpen_W(hWnd,hwndUser,szFilename); return TRUE; } } switch (wmId) { case IDM_ABOUT: ShellAboutA ( hWnd, szAppName, szNull, LoadIcon( ghInst, MAKEINTRESOURCE(IDI_APPICON)) ); break; case IDM_EXIT: if (dwAppState & AS_FILEDIRTY) { if (!QueryForSave(hWnd,hwndUser)) return TRUE; // user cancelled } DestroyWindow(hWnd); break; case IDM_NEW: OnNew(hWnd,hwndUser); break; case IDM_OPEN: OnOpen(hWnd,hwndUser); break; case IDM_OPENREGISTRY: OnOpenRegistry(hWnd,hwndUser,TRUE); break; case IDM_TEMPLATEOPT: OnTemplateOptions(hWnd); break; #ifdef INCL_GROUP_SUPPORT case IDM_GROUPPRIORITY: OnGroupPriority(hWnd); break; #endif case IDM_SAVE: OnSave(hWnd,hwndUser); break; case IDM_SAVEAS: OnSaveAs(hWnd,hwndUser); break; case IDM_CLOSE: OnClose(hWnd,hwndUser); break; case IDM_COPY: OnCopy(hWnd,hwndUser); break; case IDM_PASTE: OnPaste(hWnd,hwndUser); break; case IDM_CONNECT: OnConnect(hWnd,hwndUser); break; case IDM_DISCONNECT: OnClose(hWnd,hwndUser); break; case IDM_ADDUSER: DoAddUserDlg(hWnd,hwndUser); break; #ifdef INCL_GROUP_SUPPORT case IDM_ADDGROUP: DoAddGroupDlg(hWnd,hwndUser); break; #endif case IDM_REMOVE: OnRemove(hWnd,hwndUser); break; case IDM_ADDWORKSTATION: DoAddComputerDlg(hWnd,hwndUser); break; case IDM_PROPERTIES: OnProperties(hWnd,hwndUser); break; case IDM_SMALLICONS: SetNewView(hWnd,hwndUser,VT_SMALLICONS); break; case IDM_LARGEICONS: SetNewView(hWnd,hwndUser,VT_LARGEICONS); break; case IDM_LIST: SetNewView(hWnd,hwndUser,VT_LIST); break; case IDM_DETAILS: SetNewView(hWnd,hwndUser,VT_REPORT); break; case IDM_TOOLBAR: ViewInfo.fToolbar = !ViewInfo.fToolbar; ShowWindow(hwndToolbar,(ViewInfo.fToolbar ? SW_SHOW : SW_HIDE)); UpdateListControlPlacement(hWnd,hwndUser); CheckMenuItems(hWnd); break; case IDM_STATUSBAR: ViewInfo.fStatusBar = !ViewInfo.fStatusBar; ShowWindow(hwndStatusBar,(ViewInfo.fStatusBar ? SW_SHOW : SW_HIDE)); UpdateListControlPlacement(hWnd,hwndUser); CheckMenuItems(hWnd); break; case IDM_HELPCONTENTS: HtmlHelp(hWnd,LoadSz(IDS_HELPFILE,szSmallBuf,ARRAYSIZE(szSmallBuf)), HH_HELP_FINDER,0); break; default: return (DefWindowProc(hWnd, message, wParam, lParam)); } break; case WM_CREATE: if (!OnCreate(hWnd)) { return (-1); // fail creation } return 0; break; case WM_FINISHINIT: OnInit(hWnd); // finish doing init stuff break; case WM_SETFOCUS: if (hwndUser) SetFocus(hwndUser); break; case WM_PAINT: { PAINTSTRUCT ps; BeginPaint(hWnd,&ps); EndPaint(hWnd,&ps); } break; case WM_QUERYENDSESSION: case WM_CLOSE: if (dwAppState & AS_FILEDIRTY) { if (!QueryForSave(hWnd,hwndUser)) return TRUE; // user cancelled } goto defproc; break; case WM_DESTROY: OnDestroy(hWnd); break; case WM_SIZE: if (hwndStatusBar) SendMessage( hwndStatusBar, WM_SIZE, wParam, lParam ); if (hwndToolbar) SendMessage( hwndToolbar, WM_SIZE, wParam, lParam ); UpdateListControlPlacement(hWnd,hwndUser); break; case WM_NOTIFY: if (((NMHDR *) lParam)->hwndFrom == hwndUser) { return OnListNotify(hWnd,hwndUser,(NM_LISTVIEW *) lParam); } { NMHDR * pnmhdr = (NMHDR *) lParam; if (pnmhdr->code == TTN_NEEDTEXT && pnmhdr->hwndFrom == (HWND) SendMessage(hwndToolbar,TB_GETTOOLTIPS,0,0L)) return (ProcessTooltips((TOOLTIPTEXT *) lParam)); } break; default: // Passes it on if unproccessed defproc: return (DefWindowProc(hWnd, message, wParam, lParam)); } return (0); } BOOL OnCreate(HWND hWnd) { hwndMain=hWnd; InitCommonControls(); RestoreStateFromRegistry(hWnd); dwAppState = AS_CANOPENTEMPLATE; if (!InitImageLists() || !(hwndUser=CreateListControl(hWnd)) || (!InitToolbar(hWnd))) { MsgBox(hWnd,IDS_ErrOUTOFMEMORY,MB_ICONEXCLAMATION,MB_OK); FreeImageLists(); DestroyListControl(hwndUser); hwndUser=NULL; DeInitToolbar(); return FALSE; } EnableWindow(hwndUser, FALSE); LoadFileMenuShortcuts(GetSubMenu(GetMenu(hWnd),0)); SetNewView(hWnd,hwndUser,ViewInfo.dwView); UpdateListControlPlacement(hWnd,hwndUser); SetFocus(hwndUser); // send a WM_FINISHINIT message to ourselves to load template file // and data file. Do this after WM_CREATE returns so that status // bar can display text, etc PostMessage(hWnd,WM_FINISHINIT,0,0L); return TRUE; } BOOL OnInit(HWND hWnd) { HKEY hKey; // check to see if we have a network installed if (GetSystemMetrics(SM_NETWORK) & 0x1) { fNetworkInstalled = TRUE; } if (fNetworkInstalled) { // add a "connect" menu item MENUITEMINFO mii; HMENU hMenu = GetSubMenu(GetMenu(hWnd),0); mii.cbSize = sizeof(mii); mii.fMask = MIIM_TYPE; mii.fType = MFT_SEPARATOR; InsertMenuItem(hMenu,6,TRUE,&mii); mii.fMask = MIIM_TYPE | MIIM_ID; mii.wID = IDM_CONNECT; mii.fType = MFT_STRING; mii.dwTypeData = szSmallBuf; LoadSz(IDS_CONNECT,szSmallBuf,ARRAYSIZE(szSmallBuf)); InsertMenuItem(hMenu,7,TRUE,&mii); } if (!(dwCmdLineFlags & CLF_DIALOGMODE)) { if ((LoadTemplates(hWnd) == ERROR_SUCCESS) || (GetATemplateFile(hWnd) && (LoadTemplates(hWnd) == ERROR_SUCCESS))) { dwAppState |= AS_CANHAVEDOCUMENT; } } // if filename specified on command line, try to load it if (!(dwCmdLineFlags & CLF_DIALOGMODE) && szDatFilename[0]) { OnOpen_W(hWnd,hwndUser,szDatFilename); } EnableMenuItems(hWnd,dwAppState); CheckMenuItems(hWnd); return TRUE; } VOID RunDialogMode(HWND hWnd,HWND hwndUser) { int iStart = 0; HGLOBAL hUser=NULL; UINT uRet; extern DWORD dwDlgRetCode; // load the template file if (uRet = LoadTemplates(hWnd) != ERROR_SUCCESS) { switch (uRet) { case ERROR_FILE_NOT_FOUND: dwDlgRetCode = AD_ADMNOTFOUND; break; case ERROR_NOT_ENOUGH_MEMORY: dwDlgRetCode = AD_OUTOFMEMORY; break; default: dwDlgRetCode = AD_ADMLOADERR; break; } return; } // try to load the data file if (!LoadFile(szDatFilename,hWnd,hwndUser,FALSE)) { // if we can't load it, try creating it if (CreateHiveFile(szDatFilename) != ERROR_SUCCESS || !LoadFile(szDatFilename,hWnd,hwndUser,TRUE)) { dwDlgRetCode = AD_POLLOADERR; return; } } dwAppState = AS_FILELOADED | AS_FILEHASNAME | AS_LOCALREGISTRY; hUser = FindUser(hwndUser,szDlgModeUserName,(dwCmdLineFlags & CLF_USEWORKSTATIONNAME ? UT_MACHINE : UT_USER)); // if user is not in policy file, create a new one if (!hUser) { hUser = AddUser(hwndUser,szDlgModeUserName,(dwCmdLineFlags & CLF_USEWORKSTATIONNAME ? UT_MACHINE : UT_USER)); } if (!hUser) { MsgBox(hWnd,IDS_ErrOUTOFMEMORY,MB_ICONEXCLAMATION,MB_OK); dwDlgRetCode = AD_OUTOFMEMORY; return; } // run properties dialog if (DoPolicyDlg(hWnd,hUser)) { // save changes if user OK's the dialog dwAppState = AS_FILELOADED | AS_FILEHASNAME | AS_POLICYFILE | AS_FILEDIRTY; if (!SaveFile(szDatFilename,hWnd,hwndUser)) dwDlgRetCode = AD_POLSAVEERR; } } VOID OnDestroy(HWND hWnd) { UnloadTemplates(); #ifdef INCL_GROUP_SUPPORT FreeGroupPriorityList(); #endif SaveStateToRegistry(hWnd); SaveFileMenuShortcuts(GetSubMenu(GetMenu(hWnd),0)); if (hwndUser) RemoveAllUsers(hwndUser); if (hClipboardUser) GlobalFree(hClipboardUser); DestroyListControl(hwndUser); hwndUser=NULL; DeInitToolbar(); FreeImageLists(); if (pbufTemplates) { GlobalUnlock(hBufTemplates); GlobalFree(hBufTemplates); } PostQuitMessage(0); }