获取窗口的阴影尺寸

时间:2012-10-05 10:16:11

标签: c# c++ windows winapi getsystemmetrics

我需要知道窗口的阴影尺寸。我尝试通过GetSystemMetrics WinAPI函数接收值,但我找不到要传递的参数。 关于如何全局(或单个窗口句柄)获取此值的任何想法?我知道投影的宽度取决于窗口类型(对话框/正常/等)。 我会用C#实现这个功能,但C ++也没关系。

2 个答案:

答案 0 :(得分:2)

有一种使用DWM API来确定投影大小的方法,但是,只有在窗口可见时它才起作用。

在以前的Windows版本中,有Client Rect和Window Rect。但是自从Vista发布以来,用于窗口的第三个Rect窗口称为Extended Frame Bounds。第三个rect大于Client Rect且小于Window Rect,并且排除了阴影所占据的区域。

调用DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &rect, sizeof(RECT))以读取扩展帧边界rect。此函数来自<dwmapi.h>,并且是 在Windows XP或更早版本中不可用。

请注意,如果在显示窗口之前调用此方法,将会得到不正确的结果。

答案 1 :(得分:1)

据我所知,无法获取该信息。诸如WindowClippings之类的程序通过截取屏幕并在之后裁剪为阴影尺寸来解决它。