2017-06-02 41 views
-2

我在谷歌上花了很多時間,並沒有在這個特定的主題上找到任何相關的結果。檢查任務欄中點擊的當前應用程序? (C++,Windows API)

我有一個應用程序,我希望當用戶在任務欄中單擊它(如果它還沒有最小化)時最小化。這個問題似乎與窗口無邊界的事實有關。當我將它設置爲具有邊框時,在任務欄中單擊它時將其最小化,而無需任何代碼干預。但我需要窗口無邊界,因爲我正在使用客戶端區域製作「自定義邊框」。

tl; dr我該如何檢查當前應用程序是否在任務欄中被點擊?

非常感謝! 塞繆爾

+2

錯誤的問題。你有興趣知道你的窗口應該最小化(或爲什麼它不會自動最小化),而是詢問你的解決方案。這就是所謂的[XY問題](https://meta.stackexchange.com/q/66377/205381)。 – IInspectable

+0

點擊任務欄按鈕,向窗口發送普通的'WM_SYSCOMMAND'通知,如'SC_MINIMIZE'和'SC_RESTORE'。邊界(或缺少邊界)不應該影響到這一點。當您刪除邊框時,您的代碼是否正確處理這些消息? –

+0

不知道爲什麼我從中得到了負面的兩個聲望。這是一個完全有效的問題。互聯網上沒有地方我沒有受到巨魔襲擊嗎?那麼,至少我得到了我的問題回答,並讓我的申請最小化。這是重要的。 –

回答

3

有沒有必要修補任務欄。

只要確保您有爲您的窗口設置的WS_MINIMIZEBOX|WS_MAXIMIZEBOX樣式。否則,您的窗口將無法處理WM_SYSCOMMAND,wParamSC_MINIMIZESC_RESTORE

某些資源編輯器(如Visual Studio中的編輯器)使您無法在刪除標準窗口邊框時設置WS_MINIMIZEBOX|WS_MAXIMIZEBOX。您可以以編程方式將樣式添加回來,如下所示:

DWORD style = GetWindowLong(hwnd, GWL_STYLE); 
SetWindowLong(hwnd, GWL_STYLE, style | WS_MINIMIZEBOX | WS_MAXIMIZEBOX); 
相關問題