2012-02-03 111 views
1

我正在使用本機C和win32 API處理應用程序框架。編寫處理程序,根據用戶的操作在框架內放置一個擁有的窗口。到目前爲止,我有:無法恢復最小化窗口

case WM_WINDOWPOSCHANGED: 

    GetWindowRect(hwnd, &rect); 
    SetWindowPos(
     hexp, HWND_TOP, rect.left + 5, rect.top + 30, 
      0, 0, SWP_SHOWWINDOW | SWP_NOSIZE); 

它工作得很好,除非我似乎不能從最小化狀態恢復它。我搜索了論壇,並嘗試了幾件事情與SC_RESTORE處理程序包括:

case SC_RESTORE: 

    ShowWindow(hwnd, SW_RESTORE); 
    SetForegroundWindow(hwnd); 
    BringWindowToTop(hwnd); // Doesn't work 

我也試過:

case SC_RESTORE: 

    SendMessage(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0); // no luck either 

似乎沒有任何工作。我現在必須右鍵單擊並選擇應用程序最小化時的還原。任何線索將是最受歡迎的。

**更新**我找到了一個改進。

首先不確定使用WM_WINDOWPOSCHANGED事件來操縱很多窗口是個好主意。該系統似乎觸發了很多。另外,雖然我仍在使用它,但我決定先檢查窗口是否最小化。看起來系統正在繼續檢查位置變化,同時最小化。這顯然使任務欄掛起。現在工作好多了,謝謝。強迫事物似乎並不是一種好的方式:/

+0

如果你已經解決您的問題,您應該添加的溶液,作爲一個答案,並接受它。 – 2012-02-03 19:57:59

+0

謝謝,我明天可以做到這一點。 – Chuck 2012-02-04 11:01:30

回答

1

我不知道我們是否被允許回答我們自己的問題。那麼我從來沒有用過很多API來觸及C,看起來我從一個「錯誤」的概念開始。我以爲我會寫一個擁有和管理窗口的框架,事實證明OS會告訴我迷路。似乎整個事情進入「空閒模式」並掛在任務欄上。然後我意識到已經有可以管理的窗口了。他們被稱爲「對話框」。所以我會停止嘗試將窗口粘在一起並使用適當的對話框。這是一個有趣的實驗路徑。 Sry把你的時間花在新手問題上。那麼現在你知道,如果你的窗口掛在任務欄上,「Windows」會丟棄它,它永遠不會回來。

我們重回正軌:\

相關問題