如何定义我自己的WM(如WM_CLOSE等)消息,可以用C ++中的消息泵处理?
如果可能的话。
答案 0 :(得分:6)
这取决于您使用该消息的内容。 This link显示了Win32消息的“地址空间”细分。
在一般情况下, WM_USER
不是正确的解决方案。 WM_USER
消息“可以由应用程序定义和使用,以在私有窗口类中发送消息。这些值不能用于定义整个应用程序中有意义的消息,因为某些预定义的窗口类已经定义了值在此范围内。“
最好分配一个WM_APP
范围内的消息ID。
RegisterWindowMessage
非常有用。 “注册相同字符串的所有应用程序都可以使用关联的消息号来交换消息,”因此,当您需要使用自定义消息进行简单的进程间通信时,可以使用RegisterWindowMessage
。
答案 1 :(得分:2)
是的,您只需将自己的消息定义为大于WM_USER的常量:
#define WM_MY_MESSAGE (WM_USER + 1000)
然后你可以使用普通的ON_COMMAND / ON_NOTIFY宏。
像这样的用户定义消息的问题是其他程序可以使用与您相同的常量。而且你可能会收到其他人的错误信息。
要解决此问题,您可以使用RegisterWindowMessage注册的邮件。
user defined messages/registered messages这里有一个很好的概述。
答案 2 :(得分:1)
您可以使用“RegisterWindowMessage”创建新的唯一消息。
来自MSDN的:“RegisterWindowMessage函数定义了一个新的窗口消息,保证在整个系统中是唯一的。消息值可以在发送或发布消息时使用。”