2012-11-21 27 views
2

有沒有人知道窗口被最大化時發送的WM_MESSAGE(通過在標題欄中按下最大化按鈕,還是通過雙擊標題欄?)如何檢測窗口已被最大化?

是否存在用於最大化窗口消息按鈕被按下?

Win32/C++,謝謝。

+0

這種信息非常有用......這是什麼? (爲了正確保存窗口的最大化狀態以便以後恢復,使用'GetWindowPlacement''''SetWindowPlacement''而不是'GetWindowRect''''SetWindowPos'。要刪除最大化按鈕,請省略'CreateWindow'中的'WS_MAXIMIZEBOX'標誌。限制窗口大小,處理'WM_SIZING'等等)。爲了試圖猜測一個簡單的問題而抱歉,因爲當人們這樣做時我討厭它。 –

+0

我已經從我的程序中禁用了WM_PAINT和WM_ERASEBKGRND,以便能夠顯示未經雙緩衝的圖像而不會使它們閃爍。我需要知道在窗口最大化時發送的窗口消息,因爲在點擊最大化按鈕後,圖像沒有出現在我想要的位置(所以我想處理最大化按鈕事件以將圖像放置在我想要的位置新聞)。 –

+0

我敢打賭,你忘了'CS_VREDEAW | CS_HREDRAW'樣式。 –

回答

2

你得到WM_SIZE消息在wParam中SIZE_MAXIMIZED

編輯

的@jamesdlin評論的價值波紋管叫我atention到WM_WINDOWPOSCHANGED文件,其中規定(重點煤礦):

備註 默認情況下,DefWindowProc函數發送WM_SIZE和WM_MOVE消息es到窗口。 如果應用程序在不調用DefWindowProc的情況下處理WM_WINDOWPOSCHANGED消息,則不會發送WM_SIZE和WM_MOVE消息。在調用DefWindowProc時,在WM_WINDOWPOSCHANGED消息期間執行任何移動或大小更改處理會更有效。

謝謝詹姆斯!

+0

但是,通常情況下,你會是對的,因爲我正在處理WM_MOVE消息,出於某種原因,當窗口最大化時,將發送WM_MOVE消息而不是WM_SIZE。我會接受這個答案,因爲它實際上是我正在尋找的那個,但我不知道爲什麼WM_MOVE在窗口最大化事件上被調用。 –

+1

請注意,如果窗口處理並消耗「WM_WINDOWPOSCHANGED」,則不會發送WM_SIZE。 – jamesdlin

+0

@jamesdlin我更新了問題,以包含關於該文檔的報價。謝謝! – jachguate

1

最近我處理了這一點,我就解決的辦法是爲了響應檢查IsZoomedWM_WINDOWPOSCHANGED,其結果進行對照前一個檢測時發生轉換,然後轉發WM_WINDOWPOSCHANGED到默認的窗口過程。

如果你有過消息在應用程序中處理完全控制,並知道有沒有(並不會永遠是)一個WM_WINDOWPOSCHANGED處理抑制WM_MOVE/WM_SIZE,那麼你應該能夠直接處理它如在jachguate's answer中描述的WM_SIZE處理器。