我有一个 WPF 对话框,我想在 Win32 应用程序中显示为非模式窗口。调用 window.Show() 正确显示窗口,并且所有鼠标事件都由它正确处理,但所有键盘事件都由父 Win32 窗口处理,因此即使用户将焦点放在文本框上,任何键入的文本都会显示在父 Win32 窗口中!
这似乎是 WinForms/WPF 互操作中的一个已知问题,在这种情况下通过ElementHost.EnableModelessKeyboardInterop
在显示对话框之前调用来修复。这会导致将新的消息过滤器添加到 WinForms 消息循环中,以便可以拦截键盘事件并将其适当地路由到 WPF 对话框。
不幸的是,我的主机应用程序不是 WinForms 应用程序,所以我没有选择调用EnableModelessKeyboardInterop
. 有没有办法在 Win32 应用程序中做类似的事情?