在win32中创建自定义消息类型?

时间:2009-11-29 19:26:52

标签: c++ c windows winapi

有没有办法在Win32中定义和发送自定义消息类型,以便被主消息处理程序捕获?例如,我的主消息处理程序捕获诸如WM_PAINT,WM_RESIZE,WM_LBUTTONDOWN等消息。我可以创建自己的WM_DOSOMETHING吗?如果是这样,我将如何发送此消息?

啊,我实际上刚刚发现这是在here之前被问到的,但是,它没有回答我实际发送此消息的方式。

3 个答案:

答案 0 :(得分:15)

哇,让我们停下来思考......

首先,Windows本身会在WM_USER+n范围内发送消息,这就是WM_APP被发明的原因(我发现这很难)。但它变得更糟......没有什么可以阻止行为不端的应用广播 WM_USER+nWM_APP+n消息,而且因为人类偷走了众神无限愚蠢的晶体,确实发生在现实世界中。

所以,在我之后重复,唯一安全的信息就是我自己定义的信息,只能看到自己。使用RegisterWindowMessage。即便如此,也不要信任。当我需要一个字符串来定义RegisterWindowMessage时,我使用GUIDGEN创建字符串并在生成的gobbledygook上放置一个人类可读的特定于应用程序的前缀,以帮助我区分代码中的多个消息。

投注你的同胞的愚蠢 - 这总是一个胜利的赌注。

如果您想了解整个主题的权威背景,请参阅here。不,这不是我的网站,它是Joe Newcomer的。

答案 1 :(得分:14)

是。只需在WM_USER范围内声明一个常量,例如

#define WM_RETICULATE_SPLINES (WM_USER + 0x0001)

您还可以使用RegisterWindowMessage API按名称注册消息。

然后,您可以使用SendMessage,PostMessage或其任何变体发送这些消息。

答案 2 :(得分:1)

  • 如果您创建了窗口,则可以使用WM_USER范围(或WM_APP
  • 如果不是您的班级,您可以使用WM_APP
  • 如果要将消息广播到每个顶级窗口,请使用RegisterWindowMessage注册您自己的全局消息