8 out of 28 rated this helpful - Rate this topic

GetWindowRect function

Applies to: desktop apps only

Retrieves the dimensions of the bounding rectangle of the specified window. The dimensions are given in screen coordinates that are relative to the upper-left corner of the screen.

Syntax

BOOL WINAPI GetWindowRect(
  __in   HWND hWnd,
  __out  LPRECT lpRect
);

Parameters

hWnd [in]

Type: HWND

A handle to the window.

lpRect [out]

Type: LPRECT

A pointer to a RECT structure that receives the screen coordinates of the upper-left and lower-right corners of the window.

Return value

Type:

Type: BOOL

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

In conformance with conventions for the RECT structure, the bottom-right coordinates of the returned rectangle are exclusive. In other words, the pixel at (right, bottom) lies immediately outside the rectangle.

Examples

For an example, see Initializing a Dialog Box.

Requirements

Minimum supported client

Windows 2000 Professional

Minimum supported server

Windows 2000 Server

Header

Winuser.h (include Windows.h)

Library

User32.lib

DLL

User32.dll

See also

Reference
GetClientRect
ScreenToClient
SetWindowPos
Conceptual
Windows

 

 

Send comments about this topic to Microsoft

Build date: 2/3/2012

Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
doesn't work in vista
misleading, as mentioned in the other, however 
ScreenToClient does work fine on both though, if you're just needing to coordinate mouse relative to window position.
C#
[DllImport("user32.dll")]
private static extern bool GetWindowRect(IntPtr hWnd, ref Rectangle rect);

In this, do NOT use System.Drawing.Rectangle as the type for rect. If you do this, the Rectange.Width and Rectangle.Height properties get populated, instead of Rectangle.Right and Rectangle.Bottom.
Doesn't return exactly what you'd expect on Vista with Aero Glass
Per this MSDN thread:
http://social.msdn.microsoft.com/Forums/en-US/windowsuidevelopment/thread/6c1c67a9-5548-4e9b-989f-c7dbac0b1375/

Apps under Vista that are not linked with WINVER=6 will receive a misleading set of values here, that do not account for the extra padding of "glass" pixels Vista Aero applies to the window. This appears to happen even in Aero Basic (without Glass) to retain sizing consistency. The workaround (if you don't want to set WINVER=6) seems to be to dynamically bind to dwmapi.dll and use GetProcAddress() to obtain the DwmGetWindowAttribute() function, and call it with the DWMWA_EXTENDED_FRAME_BOUNDS argument to request the genuine window frame dimensions.

This article:
http://shellrevealed.com/blogs/shellblog/archive/2006/10/12/Frequently-asked-questions-about-the-Aero-Basic-window-frame.aspx
explains the anatomy of the window frame dimensions under Vista (though it only diagrams the Aero Basic anatomy, not the full Aero Glass layout).
VB6 Declaration and usage example
VB6 declaration:
Type RECT
x1 As Long
y1 As Long
x2 As Long
y2 As Long
End Type
Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, rectangle As RECT) As Boolean
MS Access usage example:
How to Determine the Current Screen Resolution: http://support.microsoft.com/?kbid=210106
Possible VB9 declaration
Friend Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Int32, ByRef lpRect As RECT) As Boolean
Usage:
Dim RECT As API.RECT
If API.GetWindowRect(hWnd, RECT) Then
'Do something on success
Else
'Error you can Throw New Win32Exception()
End If