栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Windows 7上的GetWindowRect太小

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Windows 7上的GetWindowRect太小

我的第一个想法在下面列出,但是,如您所述,如果您确定

GetWindowRect
返回的值不正确,请参阅下面的“ 解决方案”


GetSystemMetrics(SM_CXBORDER)
GetSystemMetrics(SM_CYBORDER)
怎么了?

您正在使用的方法似乎是一种非常round回的方法,如果可以调用

GetWindowRect()
,我可以肯定也可以调用
GetSystemMetrics()

另一种可能性是用于

GetWindowRect
获取窗口的整个边界矩形并
GetClientRect
获得客户(非边界)区域的边界矩形。

应该
给你喜欢的东西

(100,200),(1000,900)
,并
(112,227),(988,888)
分别就可以制定出顶部边框的
227-200
,作为底部
900-888
,左为
112-100
,右为
900-888
(27,12,12,12)。


解析度:

一些调查发现了这一点。这是2006年的一个话题,指出您可能无法从获得正确的值

GetWindowsRect
。指向我指出的主题是:

未与WINVER = 6链接的Vista下的应用程序将在此处接收到一组误导性的值,这些值未考虑Vista
Aero应用于窗口的“玻璃”像素的额外填充。即使在Aero
Basic(无玻璃)中,为了保持尺寸一致性,这种情况似乎也会发生。解决方法(如果不想设置WINVER =
6)似乎是动态绑定到dwmapi.dll并使用GetProcAddress()获得DwmGetWindowAttribute()函数,并使用DWMWA_EXTENDED_frame_BOUNDS参数调用它以请求真正的窗口框架尺寸。

因此,基本上,使用类似的东西(您可能必须使用ctypes从Python进行此操作):

RECT r;HRESULT stat = DwmGetWindowAttribute (    hwnd,    DWMWA_EXTENDED_frame_BOUNDS,    &r,    sizeof(r));

那应该给你正确的边界矩形。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号