如何判斷窗口是在最小化或者最大化的狀態

這個問題用下面兩個函數就可以搞定了,哈哈,很簡單的。

1、IsZoomed函數:確定窗口是否是最大化的窗口。   

函數原型:BOOL IsZoomed(HWND hWnd);   
參數: hWnd:待判斷窗口的句柄。   
返回值:如果窗口已最大化,則返回值爲非零;如果窗口未最大化,則返回值爲零。   


2、IsIconic函數:確定給定窗口是否是最小化(圖標化)的窗口。   
函數原型:BOOL  IsIconic(HWND hWnd);   
參數: hWnd:待判斷窗口句柄。   
返回值:如果窗口已圖標化,返回值爲非零;如果窗口未圖標化,返回值爲零。   
 
其中IsIconic()分支代碼的作用是當窗口處於最小化狀態時進行圖標的繪製操作。但是實際上你
會發現,在窗口最小化一般來說是不會進行窗口的重繪,也就是不會觸發WM_PAINT消息。當然,用戶可以強制進行重繪。正常情況下,在 RegisterClass時我們一般會爲wc設置一個圖標Icon。如果註冊窗口類的時候爲窗口類設置了圖標,那麼當窗口最小化的時候,系統會繪製此圖 標;如果註冊窗口類的時候我們沒有爲窗口類設置圖標,那麼當窗口最小話Minimized的時候,系統會發一個WM_PAINT消息通知窗口過程進行窗口 最小化的繪製操作。msdn是如上所說。不過測試了下,通過修改對話框的GCL_HICON,設置爲0,然後在對 話框窗口最小化的時候也是不會觸發OnPaint。msdn關於WM_ICONERASEBKGND消息也是在win3.1之前的版本有效,在繪製圖標之 前先擦出背景,在win3.1之後的版本被忽略。
實際上,在窗口最小化我們可以再wm_syscommand消息中處理最小化操作,但是此時窗 口的isIconic返回的還是false,表明此時窗口的最小化狀態還沒有被設置。另外還有一個消息就是wm_size,在最小化窗口後會發生 wm_size消息,在發此消息之前窗口的最小化狀態是已經被設置了的。因此如果想要在窗口最小化做什麼操作的話,可以再wm_size中處理,然後用 IsIcnoic函數判斷是否是最小化。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章