获取窗口的阴影尺寸

问题描述 投票:3回答:2

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

c# c++ windows winapi getsystemmetrics
2个回答
2
投票

有一种方法可以使用DWM API来计算投影的大小,但是,在窗口可见之前它不起作用。

在以前的Windows版本中,有Client Rect和Window Rect。但是自Vista问世以来,已经有一个名为Extended Frame Bounds的窗口的第三个Rect。第三个rect大于Client Rect并且小于Window Rect,并且不包括投影所占用的区域。

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

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

编辑:

请注意,扩展帧边界是物理像素坐标,不受Windows的缩放功能的影响。您可能需要转换回虚拟坐标,或将虚拟坐标转换为物理坐标以使它们匹配。


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.