研究 MFC 中的消息处理,我发现:
一条消息带有 2 个参数,可为您提供有关该事件的更多信息。每个参数都是一个 32 位的值:lParam 和 wParam。
因此,当我创建一个不带参数的用户定义消息时,我将其与代码一起发送:
pParentOfClass ->SendMessage(WM_RECTANGLECHANGED,0,0);
但只是好奇,windows如何设法发送带有两个以上参数的消息,如WM_SIZE
.
研究 MFC 中的消息处理,我发现:
一条消息带有 2 个参数,可为您提供有关该事件的更多信息。每个参数都是一个 32 位的值:lParam 和 wParam。
因此,当我创建一个不带参数的用户定义消息时,我将其与代码一起发送:
pParentOfClass ->SendMessage(WM_RECTANGLECHANGED,0,0);
但只是好奇,windows如何设法发送带有两个以上参数的消息,如WM_SIZE
.
正如 Roger Rowland 在评论中已经快速指出的那样,在使用消息时,多个参数通常被打包到 LPARAM 和 WPARAM 参数的低阶和/或高阶中。
您所说的参数多于两个的意思可能是,MFC 有它自己的事件处理程序包装器,它已经从 LPARAM 和 WPARAM 参数中获取了必要的信息并将其转发给它自己的事件处理程序实现,当然可以有很多根据需要的参数。
WM_SIZE 示例:
最初,WM_SIZE 消息与包含一些标志的 LPARAM 和包含宽度和高度的 WPARAM 一起发送(通过打包成低位和高位)。
现在 MFC 接收到该消息,获取它认为用户需要的所有信息并调用它自己的事件处理程序:
afx_msg void OnSize(
UINT nType,
int cx,
int cy
);
基本上就是这样。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms632646%28v=vs.85%29.aspx http://msdn.microsoft.com/en-us/library/h464d4f3%28v =vs.90%29.aspx
看看 MAKEWPARAM ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms632664(v=vs.85).aspx ) 和 MAKELPARAM。