ホスト WinForm で、Ctrl-(Shift)-Tab をキャプチャし、次または前の MDI 子をアクティブ化し、イベントを処理済みとしてマークする、ホストされた WPF コントロールの PreviewKeyDown ハンドラーを追加します。
TheHostedWpfControl.PreviewKeyDown += (s, e) =>
{
if (e.Key == Key.Tab && ModifierKeys.HasFlag(Keys.Control))
{
ActivateNextMdiChild(ModifierKeys.HasFlag(Keys.Shift));
e.Handled = true;
}
};
次/前の MDI 子のアクティブ化は次のとおりです。
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, int lParam);
private const int WM_MDINEXT = 0x224;
private void ActivateNextMdiChild(bool backward = false)
{
if (MdiParent != null)
{
MdiClient mdiClient = MdiParent.Controls.OfType<MdiClient>().FirstOrDefault();
if (mdiClient != null)
{
SendMessage(mdiClient.Handle, WM_MDINEXT, Handle, backward ? 1 : 0);
}
}
}