目前,我有一个 Windows EXE 应用程序,其中包含几个加载的 DLL。 DLL 需要通过 PostMessage
和 SendMessage
与我的 Windows 应用程序通信。
Windows EXE 应用程序 + DLL 都在一个进程中。
消息在 EXE 和 DLL 之间应该是私有(private)的。
我想知道,我应该使用
- WM_USER based message
- WM_APP based message
- RegisterWindowMessage
为什么?
如果有一个外部进程(另一个 exe)试图查找我的 Windows 应用程序的 FindWindow,并发送具有相同 ID 的消息,会发生什么情况?
我不想回复,因为我只对来 self 自己进程中的 DLL 的消息感兴趣。
最佳答案
WM_USER 消息通常用于在开发控件时实现控件特定消息。如果您开发了一个图像编辑控件,并且需要允许该控件的用户设置图像,您可以这样做:
#define IECM_SETIMAGE (WM_USER+1) // image editor control message.
WM_APP 消息通常用于实现应用程序级逻辑。如果您想向您的应用程序发送特定消息以执行操作...
#define IEAM_SHOWTOOLBAR (WM_APP+1) // image editor app message
同时拥有 WM_APP 和 WM_USER 范围似乎有点多余 - 但是有两个用例需要拥有两个范围:
- 可以通过简单地将控件重叠或弹出并为其提供菜单和框架来从控件创建顶级窗口。然后它需要同时作为控件和应用程序框架窗口进行响应。
- 应用程序可以子类化控件,然后使用 WM_APP channel 将应用程序定义的消息发送到控件,而不会与控件的正常 WM_USER 消息范围冲突。
RegisterWindowMessage 用于在您需要系统范围内的唯一消息 ID 时创建消息 - 通常是因为您希望将消息广播到不受您自己控制的窗口,因此在WM_APP 和 WM_USER 范围。
关于c++ - 使用 WM_USER、WM_APP 或 RegisterWindowMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4406909/