Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

86 lines
2.4 KiB

/****************************** Module Header ******************************\
* Module Name: winable.c
*
* Copyright (c) 1985 - 1999, Microsoft Corporation
*
* This module contains
*
* History:
* 20-Feb-1992 DarrinM Pulled functions from user\server.
\***************************************************************************/
#include "precomp.h"
#pragma hdrstop
/***************************************************************************\
*
* GetWindowInfo()
* PRIVATE
*
* Gets information about a window in one self-consistent big block.
*
\***************************************************************************/
FUNCLOG2(LOG_GENERAL, BOOL, WINAPI, GetWindowInfo, HWND, hwnd, PWINDOWINFO, pwi)
BOOL WINAPI
GetWindowInfo(HWND hwnd, PWINDOWINFO pwi)
{
PWND pwnd;
UINT cBorders;
PCLS pclsT;
if (pwi->cbSize != sizeof(WINDOWINFO)) {
RIPERR1(ERROR_INVALID_PARAMETER, RIP_WARNING, "WINDOWINFO.cbSize %d is wrong", pwi->cbSize);
}
/*
* Validate the window
*/
pwnd = ValidateHwnd(hwnd);
if (pwnd == NULL) {
return FALSE;
}
try {
// Window rect
pwi->rcWindow = pwnd->rcWindow;
// Client rect
pwi->rcClient = pwnd->rcClient;
// Style
pwi->dwStyle = pwnd->style;
pwi->dwExStyle = pwnd->ExStyle;
pwi->dwWindowStatus = 0;
if (TestWF(pwnd, WFFRAMEON))
pwi->dwWindowStatus |= WS_ACTIVECAPTION;
// Borders
cBorders = GetWindowBorders(pwnd->style, pwnd->ExStyle, TRUE, FALSE);
pwi->cxWindowBorders = cBorders * SYSMET(CXBORDER);
pwi->cyWindowBorders = cBorders * SYSMET(CYBORDER);
// Type
pclsT = (PCLS)REBASEALWAYS(pwnd, pcls);
pwi->atomWindowType = pclsT->atomNVClassName;
// Version
if (TestWF(pwnd, WFWIN50COMPAT)) {
pwi->wCreatorVersion = VER50;
} else if (TestWF(pwnd, WFWIN40COMPAT)) {
pwi->wCreatorVersion = VER40;
} else if (TestWF(pwnd, WFWIN31COMPAT)) {
pwi->wCreatorVersion = VER31;
} else {
pwi->wCreatorVersion = VER30;
}
} except (W32ExceptionHandler(FALSE, RIP_WARNING)) {
RIPERR1(ERROR_INVALID_WINDOW_HANDLE,
RIP_WARNING,
"Window %x no longer valid",
hwnd);
return FALSE;
}
return TRUE;
}