【发布时间】:2011-06-23 22:57:12
【问题描述】:
我的情况相当复杂,但我见过其他人这样做。不幸的是,没有提到我的具体问题。 我正在尝试将包含功能区的 WPF UserControl 集成到 Win32 主机应用程序中。到目前为止,一切工作都非常顺利(甚至令我惊讶)。我正在使用 HwndSource 创建一个原始 Win32 子窗口并将其嵌入到 Win32 主机顶级窗口中。我已经尝试过 TabControls、Buttons、RadioButtons、WebBrowsers 和 UserControl 中的所有内容,它们都可以在我的 Win32 主机应用程序中使用。当然,在 UserControl 的 Grid 的第一行还有一个 Ribbon 控件。
这基本上是我正在做的事情:
mHwnd = new HwndSource (
0, 0x40000000 | 0x10000000,
0,
left,
top,
width,
height,
"CIntegrationTest",
parentHandle);
mUserCtrl = new UserControl1 ();
mHwnd.RootVisual = mUserCtrl;
这很好用。 我在功能区下方的 UserControl1 中有一些其他控件(如编辑和几个按钮)。当键盘焦点位于这些控件之一内时,我可以使用 Alt+ 访问 RibbonTabs 的 KeyTips 及其元素。但是当焦点不在 WPF UserControl 内部,而是来自 Win32 主机的某些控件时,热键不起作用。
我查看了热键的实现,发现一个名为 KeyTipService 的类(位于 RibbonControlsLibrary\Microsoft\Windows\Controls\KeyTipService.cs)使用 InputManager.Current.PostProcessInput 和 InputManager.Current.PreProcessInput 来处理KeyTip 热键。
不幸的是,我完全不知道如何将必要的关键事件从 Win32 应用程序转发到功能区。我什至不知道如何识别需要转发的消息。
也许这里有人遇到了类似的问题,或者对 WPF 消息处理有更多的线索,可以帮助我或提供一些提示。
P.S.:我在这里在 Windows XP SP3 上运行 Visual Studio 2010 Premium,并从 2010 年 10 月开始使用 Microsoft Ribbons for WPF。
【问题讨论】: