protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (base.ProcessCmdKey (ref msg, keyData)) {
return true;
}
// Handle keyboard cues state.
if ((keyData & Keys.Alt) != 0) {
Control toplevel = TopLevelControl;
if (toplevel != null) {
IntPtr param = MakeParam ((int) MsgUIState.UIS_CLEAR, (int) MsgUIState.UISF_HIDEACCEL);
XplatUI.SendMessage (toplevel.Handle, Msg.WM_CHANGEUISTATE, param, IntPtr.Zero);
}
}
// Give our menu a shot
if (ActiveMenu != null) {
if (ActiveMenu.ProcessCmdKey (ref msg, keyData))
return true;
}
// Detect any active ContextMenu for a child control that
// can't receive focus (which means: both input and preprocess)
if (ActiveTracker != null && ActiveTracker.TopMenu is ContextMenu) {
ContextMenu cmenu = ActiveTracker.TopMenu as ContextMenu;
if (cmenu.SourceControl != this && cmenu.ProcessCmdKey (ref msg, keyData))
return true;
}
if (IsMdiChild) {
switch (keyData)
{
case Keys.Control | Keys.F4:
case Keys.Control | Keys.Shift | Keys.F4:
Close ();
return true;
case Keys.Control | Keys.Tab:
case Keys.Control | Keys.F6:
MdiParent.MdiContainer.ActivateNextChild ();
return true;
case Keys.Control | Keys.Shift | Keys.Tab:
case Keys.Control | Keys.Shift | Keys.F6:
MdiParent.MdiContainer.ActivatePreviousChild ();
return true;
case Keys.Alt | Keys.OemMinus:
case Keys.Alt | Keys.Subtract:
(this.WindowManager as MdiWindowManager).ShowPopup (Point.Empty);
return true;
}
}
return false;
}