无法在HwndHost派生类

时间:2016-04-08 19:07:17

标签: c# .net wpf winapi mfc

我有一个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消息正在被处理。

有人有什么想法吗?当然,我用谷歌搜索它并没有任何用处。

0 个答案:

没有答案