首先,我想HANDLE_MSG
不應該在對話過程中使用,因爲在對話過程中,如果用戶已經處理的消息,對話框程序應返回TRUE
(MSDN document),但HANDLE_MSG
返回消息的返回值,並且在大多數情況下,它是0(如WM_PAINT
和WM_COMMAND
),它是FALSE
。我可以在對話框程序中使用HANDLE_MSG消息破解程序嗎?
但是我在很多情況下看到,人們只是使用它,就像this,它工作正常。我很困惑。那麼,我可以在對話程序中使用HANDLE_MSG
嗎?
首先,我想HANDLE_MSG
不應該在對話過程中使用,因爲在對話過程中,如果用戶已經處理的消息,對話框程序應返回TRUE
(MSDN document),但HANDLE_MSG
返回消息的返回值,並且在大多數情況下,它是0(如WM_PAINT
和WM_COMMAND
),它是FALSE
。我可以在對話框程序中使用HANDLE_MSG消息破解程序嗎?
但是我在很多情況下看到,人們只是使用它,就像this,它工作正常。我很困惑。那麼,我可以在對話程序中使用HANDLE_MSG
嗎?
那麼,這個例子並沒有得到很多清晰的分數。但是,返回TRUE並不是很常見。或者,對於您實際執行的消息返回FALSE有任何負面影響。由於您通常會偵聽默認對話框過程將忽略的消息,或者您的默認實現仍然是您想要的東西。
您需要避免翻轉忽略位,並考慮每個消息的合適的返回值應該是什麼。無論您是否需要調用SetWindowLong來設置DWL_MSGRESULT,HANDLE_MSG返回值的使用更爲合適。依靠宏是不對的,宏不夠聰明。它確實需要一個程序員。所以使用HANDLE_MSG很好。但您可能需要添加一個返回或SetWindowLong調用,具體取決於消息。