目前,我有一个Windows EXE应用程序,有几个加载的DLL。 DLL需要通过PostMessage
和SendMessage
与我的Windows应用程序通信。
Windows EXE应用程序+ DLL都在一个进程中。
该消息在EXE和DLL中应该是私有的。
我想知道,我应该使用
- WM_USER based message
- WM_APP based message
- RegisterWindowMessage
为什么?
如果有外部进程(另一个exe),尝试使用我的Windows应用程序的FindWindow,并发送具有相同ID的消息,会发生什么?
我希望不回复,因为我只对自己进程中的DLL感兴趣。
答案 0 :(得分:10)
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范围似乎有点多余 - 但是有两个用例需要两个范围:
当您需要系统范围内的唯一消息ID时,RegisterWindowMessage用于创建消息 - 通常是因为您希望将消息广播到不受您自己控制的窗口,因此对于消息ID具有自己的含义。 WM_APP和WM_USER范围。