私の状況はかなり複雑ですが、私は他の人がこれを行うのを見てきました。残念ながら、私の具体的な問題は言及されていません。 私は、リボンを含むWPF UserControlをWin32ホストアプリケーションに統合しようとしています。これまでのところ、すべてがきちんときれいに働いていました(驚いたことに、さらに)。私は生のWin32子ウィンドウを作成し、これをWin32ホストのトップレベルウィンドウに埋め込むためにHwndSourceを使用しています。私は、TabControls、ボタン、RadioButtons、WebBrowsersとUserControl内のすべてを試してみて、それらはすべて私のWin32ホストアプリケーション内から使用可能です。もちろん、UserControlのグリッドの一番上の行にリボンコントロールがあります。HwndSource win32とリボンとキーチップの統合
は、ここで私がやっているものを基本的にです:これはかなり良い作品
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を使用していることを確認しました。キーヒットのホットキーを操作します。
残念ながら、Win32アプリケーションから必要なキーイベントをどのようにリボンに転送することができるのか、私は全く考えていません。私は、転送する必要があるメッセージをどのように識別できるかも知らない。
ここで誰かが同じような問題に遭遇したか、WPFメッセージ処理に関するもう少し手がかりがあり、私に助けやヒントを与えることができます。
PS:私はここのWindows XP SP3上のVisual Studio 2010のプレミアムを実行していることだし、あなたがにWindowsフォームから未処理のキーイベントを渡すことができる必要があり、2010年10月からWPFのため
私はWinForms interopではなくwin32 interop(HwndSource)クラスを使用しています。問題は、キーボードメッセージをInputManagerに正しく転送することができないことです。これは、リボンのKeyTip実装が使用するものです。 InputManager.ProcessInput()がありますが、期待どおりに動作しません。 –