在C++中为Message Pump定义自己的WM消息

Ton*_*ion 5 c++ message window

如何定义我自己的WM(如WM_CLOSE等)消息,可以由C++中的消息泵处理?

如果这是可能的.

Aar*_*otz 6

这取决于您使用该消息的内容.此链接显示Win32消息的"地址空间"细分.

WM_USER不是在一般情况下正确的解决方案.WM_USER消息"可以由应用程序定义和使用,以在私有窗口类中发送消息.这些值不能用于定义整个应用程序中有意义的消息,因为某些预定义的窗口类已经定义了此范围内的值."

最好分配WM_APP范围内的消息ID .

RegisterWindowMessage如果您希望系统在运行时为您分配消息ID,则非常有用."注册相同字符串的所有应用程序都可以使用关联的消息号来交换消息",因此您可以RegisterWindowMessage在需要使用自定义消息进行简单的进程间通信时使用.


Bri*_*ndy 3

是的,您可以简单地将自己的消息定义为大于 WM_USER 的常量:

#define WM_MY_MESSAGE (WM_USER + 1000)
Run Code Online (Sandbox Code Playgroud)

然后您可以使用普通的 ON_COMMAND/ON_NOTIFY 宏。

像这样的用户定义消息的问题是其他程序可以使用与您相同的常量。您可能会收到其他人发来的错误消息。

要解决这个问题,您可以使用RegisterWindowMessage来注册消息。

这里有关于用户定义消息/注册消息的详细概述。

  • 当然请注意,其他程序不应该向您发送“WM_USER-0x7FFF”范围内的消息。哎呀,它们甚至不应该在程序内发送。为此,您有“WM_APP-0xBFFF range”。WM_USER 是窗口类的内部变量,而不是程序的内部变量。 (2认同)