2012-09-14 30 views
3

當我創建一個正常的「重疊」窗口時,我想設置一個完整的客戶端大小(比如300 x 300)。如何爲重疊窗口設置精確的客戶端大小? (winapi)

還有就是AdjustWindowRectEx()功能,我可以通過所需的客戶端 區域,並得到我能傳遞給CreateWindowEx大小,但它說 的文檔中,我不應該使用它的重疊窗口 ,我不明白爲什麼。

當我通過300×300,我得到306 X 326從它,當我接收 WM_SIZE,客戶端大小是298 X 298因此它是2個像素太小。

如何創建具有給定客戶端大小的重疊窗口?

回答

1

我在我的情況下,錯誤是如下:

AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS, FALSE, WS_OVERLAPPEDWINDOW); 

改變這種修復它:

AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS, FALSE, 0); 
+1

您的答案使用了五個函數參數,但'AdjustWindowRectEx'只需要四個。 – NathanAldenSr

1

我不知道爲什麼AdjustWindowRect不工作(除非您的客戶區包含一個帶有一個像素邊框的子窗口)。

請注意,您可以將此功能用於重疊窗口。該文檔說,你不能使用WS_OVERLAPPED風格(我猜是因爲它的值爲零),但你可以使用WS_OVERLAPPEDWINDOW。

作爲替代方法,您可以調用GetWindowRect和GetClientRect,計算邊框的寬度/高度(兩個矩形的寬度/高度之差),將這些添加到所需的客戶端大小並設置窗口大小。我相信你可以在窗口顯示之前做到這一點。

+0

所以,我理解你說AdjustWindowrectEx只是應該工作?????? (L8er我正在做一些客戶端大小的變化(因爲我blit到它,它表明,blit不工作,如果客戶端沒有對齊到4像素 - 我有點失落,但我認爲這是原因,因爲它可能是不叫 - 但會檢查它) –

+0

naay,這似乎是好的,我只是得到306 325調整,然後298 298在第一WM_SIZE,仍然沒有理由 –

+0

正如我在最後一段中所說,如果AdjustWindowRect isn因爲某些原因你可以自己計算邊框的大小 – arx

相關問題