2012-03-20 34 views
1

我正在用本機C++和WinAPI製作一個程序。如何在不影響ALT + F4或關閉任務欄的情況下重新調整窗口的關閉按鈕?

這個程序有一個主要的應用程序窗口,我想有點持久。通過紅色的X按鈕關閉一個窗口似乎很自然,而當我實際上不想退出程序時,我經常意外按下它(這發生在我與Teamspeak之間)。所以,我試圖將紅色的X按鈕重新用於最小化按鈕,以避免意外退出。

但是,我的應用程序應該有一些方法來退出與標準系統控制程序。我想要允許ALT + F4並右鍵單擊任務欄圖標關閉。我嘗試攔截WM_CLOSE和SYSCOMMAND(SC_CLOSE),但是這似乎禁用了退出程序的所有標準系統方法(在Process Explorer中沒有殺死它 - 不是真正的標準方法)。

有沒有辦法讓只攔截窗口的紅色X按鈕?我注意到Windows Live Messenger這樣做,但我不知道如何。

回答

2

處理WM_NCLBUTTONDOWN消息並使用WM_NCHITTEST來檢查它是否點擊即將交付給HTCLOSE控件(這是您的紅色[X]所解決的問題)。或者,也可以自行處理WM_NCHITTEST,並通過將返回值替換爲其他值來防止發現部分窗口GUI。

+0

非常感謝!它工作正常,但你會有任何機會知道如何做到這一點在鼠標上?這就是Windows Live Messenger的功能。 'WM_NCLBUTTONUP'似乎不起作用... – Joshua 2012-03-20 15:06:31

+0

你爲什麼不檢查通過'Spy ++'進入的消息來查看哪些確切可能有用?有可能'WM_NCLBUTTONUP'在內部消息循環中傳遞並且不會到達您的鉤子,但可能還有其他幫助。並記住處理'WM_NCHITTEST'將關閉按鈕轉換爲「常規」按鈕的另一種選擇。 – 2012-03-20 15:29:12

+0

我正在使用Spy ++,'WM_NCLBUTTONUP'似乎永遠不會出現。我嘗試攔截WM_NCHITTEST,但當鼠標移過或點擊最小化/最大化/關閉按鈕時,該消息從不發送。我懷疑大多數鼠標行爲調用系統內部使用'WM_NCHITTEST',但我不知道如何截取這個。 – Joshua 2012-03-20 16:40:56

相關問題