/*++ Copyright (c) 1994 Microsoft Corporation Module Name: WinUtils.C Abstract: Windows utility functions Author: Bob Watson (a-robw) Revision History: 24 Jun 94 Written --*/ // // Windows Include Files // #include #include #include #include // unicode macros #include // string to number conversions #include // for common about box function // // app include files // #include "otnboot.h" #include "otnbtdlg.h" BOOL Dlg_WM_SYSCOMMAND ( IN HWND hwndDlg, IN WPARAM wParam, IN LPARAM lParam ) /*++ Routine Description: Processes system command (e.g. from system menu) messages sent to dialog boxes: SC_CLOSE: closes the application SC_MINIMIZE: saves the dlg caption, set's the window caption to the app name, then minimizes the dlg. SC_RESTORE: resets the dlg caption to the store name and restores the dlg window NCDU_ID_ABOUT: displays the appropriate about box Arguments: Std. Window message args Return Value: TRUE if message is processed by this routine FALSE if not --*/ { LPTSTR szWindowName; static TCHAR szLastDlgTitle[MAX_PATH]; switch (wParam & 0x0000FFF0) { case SC_CLOSE: PostMessage (GetParent(hwndDlg), NCDU_SHOW_EXIT_MESSAGE_DLG, 0, 0); SetCursor(LoadCursor(NULL, IDC_WAIT)); return TRUE; // done case SC_MINIMIZE: SetSysMenuMinimizeEntryState (hwndDlg, FALSE); // disable minimize // save dialog title for restoration GetWindowText (hwndDlg, szLastDlgTitle, MAX_PATH); // set title to app name szWindowName = (LPTSTR)GlobalAlloc(GPTR, MAX_PATH_BYTES); if (szWindowName != NULL) { #ifdef TERMSRV if (_tcschr(GetCommandLine(),TEXT('/')) != NULL ) { if (LoadString ( (HINSTANCE)GetWindowLongPtr(hwndDlg, GWLP_HINSTANCE), WFC_STRING_BASE, szWindowName, MAX_PATH) > 0) { SetWindowText (hwndDlg, szWindowName); } } else { #endif // TERMSRV if (LoadString ( (HINSTANCE)GetWindowLongPtr(hwndDlg, GWLP_HINSTANCE), STRING_BASE, szWindowName, MAX_PATH) > 0) { SetWindowText (hwndDlg, szWindowName); } #ifdef TERMSRV } #endif // TERMSRV FREE_IF_ALLOC (szWindowName); } // minimize window ShowWindow (hwndDlg, SW_MINIMIZE); return TRUE; case SC_RESTORE: SetSysMenuMinimizeEntryState (hwndDlg, TRUE); // enable minimize if (szLastDlgTitle[0] != 0) SetWindowText (hwndDlg, szLastDlgTitle); szLastDlgTitle[0] = 0; // clear buffer ShowWindow (hwndDlg, SW_RESTORE); return ERROR_SUCCESS; case NCDU_ID_ABOUT: lstrcpy (szLastDlgTitle, GetStringResource (CSZ_ABOUT_TITLE)); lstrcat (szLastDlgTitle, cszPoundSign); ShellAbout (hwndDlg, szLastDlgTitle, GetStringResource (SZ_APP_TITLE), LoadIcon ( (HINSTANCE)GetWindowLongPtr(hwndDlg, GWLP_HINSTANCE), MAKEINTRESOURCE (NCDU_APP_ICON))); szLastDlgTitle[0] = 0; return TRUE; default: return FALSE; } } LRESULT Dlg_WM_MOVE ( IN HWND hwndDlg, IN WPARAM wParam, IN LPARAM lParam ) /*++ Routine Description: updates the current position of the window, whenever the window is moved so the next window (dialog) can be position in the same location. Arguments: IN HWND hwndDlg Handle to dialog window IN WPARAM wParam Not used IN LPARAM lParam Not used Return Value: ERROR_SUCCESS --*/ { RECT rWnd; GetWindowRect(hwndDlg, &rWnd); PostMessage (GetParent(hwndDlg), NCDU_UPDATE_WINDOW_POS, (WPARAM)rWnd.left, (LPARAM)rWnd.top); return (LRESULT)ERROR_SUCCESS; } BOOL Dlg_WM_PAINT ( IN HWND hwndDlg, IN WPARAM wParam, IN LPARAM lParam ) /*++ Routine Description: paints app icon in minimized dialog box window. Arguments: Std. Window message arguments Return Value: TRUE if message is processed by this routine FALSE if not. --*/ { PAINTSTRUCT ps; if (IsIconic(hwndDlg)) { HICON hIcon; hIcon = LoadIcon( (HINSTANCE)GetWindowLongPtr(GetParent(hwndDlg), GWLP_HINSTANCE), MAKEINTRESOURCE(NCDU_APP_ICON)); if( hIcon != NULL ) { BOOL bDI; BeginPaint (hwndDlg, &ps); bDI = DrawIcon (ps.hdc, 0, 0, hIcon); EndPaint (hwndDlg, &ps); return bDI; } } return FALSE; } BOOL CenterWindow ( HWND hwndChild, HWND hwndParent ) /*++ Routine Description: Centers the child window in the Parent window Arguments: HWND hwndChild, handle of child window to center HWND hwndParent handle of parent window to center child window in ReturnValue: Return value of SetWindowPos --*/ { RECT rChild, rParent; LONG wChild, hChild, wParent, hParent; LONG wScreen, hScreen, xNew, yNew; HDC hdc; // Get the Height and Width of the child window GetWindowRect (hwndChild, &rChild); wChild = rChild.right - rChild.left; hChild = rChild.bottom - rChild.top; // Get the Height and Width of the parent window GetWindowRect (hwndParent, &rParent); wParent = rParent.right - rParent.left; hParent = rParent.bottom - rParent.top; // Get the display limits hdc = GetDC (hwndChild); if( hdc != NULL ) { wScreen = GetDeviceCaps (hdc, HORZRES); hScreen = GetDeviceCaps (hdc, VERTRES); ReleaseDC (hwndChild, hdc); // Calculate new X position, then adjust for screen xNew = rParent.left + ((wParent - wChild) /2); if (xNew < 0) { xNew = 0; } else if ((xNew+wChild) > wScreen) { xNew = wScreen - wChild; } // Calculate new Y position, then adjust for screen yNew = rParent.top + ((hParent - hChild) /2); if (yNew < 0) { yNew = 0; } else if ((yNew+hChild) > hScreen) { yNew = hScreen - hChild; } } else { xNew = 0; yNew = 0; } // Set it, and return return SetWindowPos (hwndChild, NULL, (int)xNew, (int)yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER); }