通常情况下windows的控件会把消息发送给它们的父窗口,这就表示处理消息的代码必须写在父窗口中。
在MFC4.0之后,提供了新的功能message reflection,支持在Control中直接处理消息。
但是在Control中处理消息时,拦截的消息编码需要加上WM_REFLECT.例如下面
protected override void WndProc(ref Message m) {
switch (m.Msg) {
case 0x204E: // WM_REFLECT_NOTIFY
if (!this.HandleReflectNotify(ref m))
base.WndProc(ref m);
break;
}
}这里的WM_REFLECT_NOTIFY =
WM_REFLECT +WM_NOTIFY = WM_USER+0X1C00+ 0X004E = 0X0400 + 0X1C00 + 0X004E = 0X204E
本文深入探讨了在MFC4.0之后,Windows控件如何直接处理消息以及如何使用Messagereflection特性。通过实例展示了如何在Control中拦截并处理消息,特别是如何处理WM_REFLECT和WM_NOTIFY消息的组合,为开发者提供了一种高效的消息处理方式。

942

被折叠的 条评论
为什么被折叠?



