我的第一個想法是列舉如下,但如果像你的狀態,你肯定GetWindowRect
被返回的值不正確,請參閱解決方案進一步下跌。
「這有什麼錯GetSystemMetrics(SM_CXBORDER)
和GetSystemMetrics(SM_CYBORDER)
?
您正在使用的方法似乎做的很婉轉地和,如果你可以調用GetWindowRect()
,我敢肯定,你可以調用GetSystemMetrics()
爲好。
另外一個可能性是使用GetWindowRect
以獲取窗口和GetClientRect
整個邊框以獲取客戶端(非邊境)地區的邊界矩形。
這應該給你像(100,200),(1000,900)
和(112,227),(988,888)
分別,你可以計算出上邊框爲227-200
,底部爲900-888
,留給112-100
,右爲900-888
(27,12,12,12)。
解決方案:
調查的位變成了this。這是2006年的一個帖子,指出您可能無法從GetWindowsRect
獲得正確的值。這個線程指出我這樣說:
Vista下未與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));
而且應該給你正確的邊框。
那麼,它返回1. 1不是該窗口上任何邊界的寬度。我很確定我想要的那個窗口的值是8和30. – 2010-07-07 06:04:29
你怎樣得到8和30?正確的外觀框架似乎在底部具有與側面相同的寬度。 – paxdiablo 2010-07-07 06:25:24
我也關心頂部。 – 2010-07-07 06:43:04