//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997. // // File: W I N D U T I L . C P P // // Contents: Window utilities -- For now, just CenterWindow // // Notes: // // Author: jeffspr 22 May 1998 // //---------------------------------------------------------------------------- #include "pch.h" #pragma hdrstop //+--------------------------------------------------------------------------- // // Function: FCenterWindow // // Purpose: Center a child window on the parent // // Arguments: // hwndChild [in] Child window handle // hwndParent [in] Parent window handle (or NULL for desktop) // // Returns: // // Author: jeffspr 22 May 1998 // // Notes: // BOOL FCenterWindow (HWND hwndChild, HWND hwndParent) { RECT rChild, rParent; int wChild, hChild, wParent, hParent; int wScreen, hScreen, xNew, yNew; HDC hdc = NULL; BOOL fReturn = TRUE; AssertSz(hwndChild, "Bad Child Window param to CenterWindow"); // 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 // if (NULL == hwndParent) { GetWindowRect (GetDesktopWindow(), &rParent); } else { GetWindowRect (hwndParent, &rParent); } wParent = rParent.right - rParent.left; hParent = rParent.bottom - rParent.top; // Get the display limits // hdc = GetDC (hwndChild); if (hdc) { 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; } // Set it, and return // fReturn = SetWindowPos (hwndChild, NULL, xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER); } else { fReturn = FALSE; } return fReturn; }