研究MFC中的消息处理,我发现:
一条消息包含两个参数,可为您提供有关事件的更多信息。每个参数都是一个32位值:lParam和wParam
因此,当我创建了一个没有参数的用户定义消息ww时,我用代码发送了它:
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.aspxhttp://msdn.microsoft.com/en-us/library/h464d4f3%28v=vs.90%29.aspx
看看MAKEWARM(http://msdn.microsoft.com/en-us/library/windows/desktop/ms632664(v=vs.85).aspx)和MAKELPARAM。