使用WM_USER,WM_APP或RegisterWindowMessage

时间:2010-12-10 08:22:55

标签: c++ windows mfc

目前,我有一个Windows EXE应用程序,有几个加载的DLL。 DLL需要通过PostMessageSendMessage与我的Windows应用程序通信。

Windows EXE应用程序+ DLL都在一个进程中。

该消息在EXE和DLL中应该是私有的。

我想知道,我应该使用

 - WM_USER based message
 - WM_APP based message
 - RegisterWindowMessage

为什么?

如果有外部进程(另一个exe),尝试使用我的Windows应用程序的FindWindow,并发送具有相同ID的消息,会发生什么?

我希望不回复,因为我只对自己进程中的DLL感兴趣。

1 个答案:

答案 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范围似乎有点多余 - 但是有两个用例需要两个范围:

  • 可以通过简单地使其重叠或弹出并为其提供菜单和框架来从控件创建顶级窗口。然后它需要作为控件和应用程序框架窗口进行响应。
  • 应用程序可以对控件进行子类化,然后使用WM_APP通道将应用程序定义的消息发送到控件,而不会与控件正常的WM_USER消息范围冲突。

当您需要系统范围内的唯一消息ID时,RegisterWindowMessage用于创建消息 - 通常是因为您希望将消息广播到不受您自己控制的窗口,因此对于消息ID具有自己的含义。 WM_APP和WM_USER范围。

相关问题