關於對話方塊最小化到托盤後,點選托盤圖示後只在工作列顯示而無法還原視窗的解決方法。

loongee發表於2009-02-21

在跟隨網上的貼子做完怎樣將程式縮小到托盤和怎樣還原之後,發現網上所說的只用ShowWindow(SW_SHOW)只能將程式在工作列顯示出來,而並不會自動還原到最小化之前的狀態(也就是仍然是最小化的,要想看視窗仍然只能在工作列上點選程式,以使程式恢復),不符合程式設計習慣,因此嘗試在使用ShowWindow函式之後使用SetWindowPos函式,但是無論裡面的引數怎樣設定也無法將視窗自動還原;

隨後又嘗試向視窗傳送WM_SIZE訊息,但是仍然失敗。

 

無奈之下,只好過載PreTranslateMessage函式,然後使用TRACE巨集將所有的訊息全部列印出來(當然得過濾掉WM_MOUSEMOVE訊息,否則滿屏都是訊息。)。結果發現在任務上點選程式使程式還原時,程式收到了兩個訊息,一個訊息是(274,61728, 0),而另一個訊息是(5,1,19661280),隨後直接在ShowWindow(SW_SHOW);語句後新增SendMessage(274, 61782, 0)和SendMessage(5,1,19661280)便可以實現視窗的自動還原了。

 

追查274號和5號訊息發現,原來274號訊息就是WM_SYSCOMMAND訊息,而5號訊息就是WM_SIZE,隨後進行優化,只傳送274號訊息,即使用SendMessage(WM_SYSCOMMAND, SC_RESTORE)即可實現視窗的還原了。


注:最終實現方案:ShowWindow(SW_RESTORE);

相關文章