首先,我认为HANDLE_MSG
不应该在对话过程中使用,因为在对话过程中,如果用户处理了消息,对话过程应该返回TRUE
(MSDN文档),但HANDLE_MSG
返回消息的返回值,并且大多数情况下,它是0(喜欢WM_PAINT
and WM_COMMAND
) 这是FALSE
.
但我看到在很多情况下,人们只是像这样使用它,而且效果很好。我很困惑。那么,我可以HANDLE_MSG
在对话过程中使用吗?
好吧,为了清楚起见,这个例子并没有得到很多分数。然而,返回 TRUE 并不是很常见。或者在您实际实现的消息上返回 FALSE 会产生任何负面影响。因为您通常会侦听默认对话过程将忽略的消息,或者无论如何您都想要其默认实现。
您需要避免翻转忽略位,并为每条消息考虑适当的返回值应该是什么。而无论是否需要调用SetWindowLong来设置DWL_MSGRESULT,对于HANDLE_MSG返回值的使用比较合适。依赖宏不是正确的做法,宏不够聪明。它确实需要程序员。所以使用 HANDLE_MSG 就可以了。但是您可能需要添加一个return或 SetWindowLong 调用,具体取决于消息。