MFC对话框中托管的非模态WPF控件无法接收键盘输入
在MFC对话框中托管WPF控件时文本框无法接收键盘输入的问题
我们正在将旧版C++/CLI MFC应用现代化,用C#/WPF编写的新控件替换原有对话框。按照微软《Hosting WPF Content in Win32》指南在CDialog中托管WPF控件后,控件内的文本框无法接收键盘输入(包括退格、删除、空格等特殊键)。
我们尝试通过HwndSource实现消息循环处理键盘消息,但没有效果,代码如下:
private void UserControl_Loaded(object sender, RoutedEventArgs e) { HwndSource source = (HwndSource)PresentationSource.FromVisual(this); source.AddHook(WndProc); } private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { HwndSource source = HwndSource.FromHwnd(hwnd); if (source != null) { System.Windows.Interop.MSG message = new MSG { hwnd = hwnd, lParam = lParam, wParam = wParam, message = msg, pt_x = 0, pt_y = 0 }; switch (msg) { // WM_KEYDOWN case 0x0100: Debug.WriteLine("Received WM_KEYDOWN"); var keyboardSink = (IKeyboardInputSink)source; keyboardSink.TranslateAccelerator(ref message, Keyboard.Modifiers); break; // WM_CHAR case 0x0102: Debug.WriteLine("Received WM_CHAR"); var keyboardSink2 = (IKeyboardInputSink)source; keyboardSink2.TranslateChar(ref message, Keyboard.Modifiers); break; } } return IntPtr.Zero; }
但将该WPF控件嵌入纯Win32窗口可正常工作,从主WPF控件弹出的模态对话框内文本框也能接收键盘输入,推测问题与主控件的非模态特性相关。
我们已准备好最小复现示例,示例应用截图如下:
本人MFC知识基础薄弱,恳请各位提供帮助。
内容的提问来源于stack exchange,提问作者Michaelvsk
相关产品推荐
相关产品推荐

