有没有办法在Win32中定义和发送自定义消息类型,以便被主消息处理程序捕获?例如,我的主消息处理程序捕获诸如WM_PAINT,WM_RESIZE,WM_LBUTTONDOWN等消息。我可以创建自己的WM_DOSOMETHING吗?如果是这样,我将如何发送此消息?
啊,我实际上刚刚发现这是在here之前被问到的,但是,它没有回答我实际发送此消息的方式。
答案 0 :(得分:15)
哇,让我们停下来思考......
首先,Windows本身会在WM_USER+n
范围内发送消息,这就是WM_APP
被发明的原因(我发现这很难)。但它变得更糟......没有什么可以阻止行为不端的应用广播 WM_USER+n
或WM_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