win32 WM_NOTIFY与WM_COMMAND

时间:2019-04-19 18:09:56

标签: winapi

这是一个理论问题,发布用于控制Win32 API中的消息。

WM命令和通知之间有什么区别? 我们什么时候需要处理这些消息,什么时候选择忽略它们?。

之所以产生这种怀疑,是因为这两个消息都是在用户与控件交互时发送的,并且都向窗口过程发送了相同的信息,这些信息是事件类型,控件和控件以结构形式处理 (如果是WM_NOTIFY,则为LPNMHDR);或者,如果是WM_COMMAND,则为直接(LPARAM控制柄,而LOWORD(WPARAM))

具有所有这些相似之处,我们为什么仍将两者同时使用,而不仅仅是贬低一个?

1 个答案:

答案 0 :(得分:4)

由于向后兼容,我们同时使用这两种方法。新的控件倾向于使用WM_NOTIFY(功能要强大得多),但是有发送WM_COMMAND的现有控件,MS不会对此进行更改。

我说WM_NOTIFY更强大,因为它的lParam是NMHDR *,如果NMHDR是POD类型的第一个成员(或现代C ++术语中的标准布局),则可以将lParam转换为实际类型控制已发送。 WM_COMMAND所能提供的只是命令代码和窗口句柄。

关于何时处理它们完全是需要解决的问题,如果您需要处理特定控件中的特定动作,则可以处理消息,如果不需要则可以处理。