我有一个MFC应用程序,但在某些地方我们使用WPF。在我正在研究的一个案例中,我们有一个模态显示的WPF窗口,但我们正在尝试在WPF窗口中显示基于MFC的专用编辑控件。
我试着跟着这本食谱,从HwndHost那里得到了我的课程。我试图拦截控件的WM_NOTIFY消息,因为它通过WM_NOTIFY发送类似EN_CHANGED通知的内容。
我已经做了两件事来尝试拦截方法。
1)覆盖WndProc:
protected override IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
handled = false;
switch (msg)
{
case WM_COMMAND:
break;
case WM_NOTIFY:
++NOtifyCount;
break;
}
return IntPtr.Zero;
}
2)点击HwndHost的MessageHook事件,并有一个这样的钩子程序:
IntPtr SyntaxEditHost_MessageHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
handled = false;
switch (msg)
{
case WM_COMMAND:
break;
case WM_NOTIFY:
++NOtifyCount;
break;
}
return IntPtr.Zero;
}
如果我在WM_NOTIFY处理程序中设置断点,它永远不会被击中。如果我在发送WM_NOTIFY之前在C ++代码中设置断点,然后在上述两种方法中设置断点来查找任何消息,则不会收到任何消息。
如果我查看Spy ++中的WM_NOTIFY消息,我可以验证HwndHost是否正在接收消息。每次我在编辑器中按一个键,HwndHost都会收到WM_NOTIFY消息。但是,在我有机会在我的WndProc覆盖或消息钩子的实现中自己处理它们之前,某些方式WM_NOTIFY消息正在被处理。
有人有什么想法吗?当然,我用谷歌搜索它并没有任何用处。