public override bool PreProcessMessage(ref Message message)
{
if (message.Msg == NativeMethods.WM_KEYDOWN || message.Msg == NativeMethods.WM_SYSKEYDOWN)
{
// Process shortcuts.
Keys keyData = (Keys) (int) message.WParam | ModifierKeys;
if (state == State.None)
{
CommandBarItem[] shortcutHits = this.items[keyData];
if (shortcutHits.Length > 0)
{
if (this.PerformClick(shortcutHits[0]))
{
return true;
}
}
}
}
// All the following code is for MenuBar only.
if (this.Style != CommandBarStyle.Menu)
{
return false;
}
if ((message.Msg >= NativeMethods.WM_LBUTTONDOWN) && (message.Msg <= NativeMethods.WM_MOUSELAST))
{
// Check if user clicked outside the MenuBar and end tracking.
if ((message.HWnd != Handle) && (this.state != State.None))
{
this.SetState(State.None, -1);
}
}
else if ((message.Msg == NativeMethods.WM_SYSKEYUP) || (message.Msg == NativeMethods.WM_KEYDOWN) || (message.Msg == NativeMethods.WM_SYSKEYDOWN))
{
Keys keyData = ((Keys) (int) message.WParam) | ModifierKeys;
Keys keyCode = ((Keys) (int) message.WParam);
if ((keyData == Keys.F10) || (keyCode == Keys.Menu))
{
if (message.Msg == NativeMethods.WM_SYSKEYUP)
{
if ((this.state == State.Hot) || (this.lastState == State.HotTracking))
{
this.SetState(State.None, 0);
}
else if (state == State.None)
{
this.SetState(State.Hot, 0);
}
return true;
}
}
else if (message.Msg == NativeMethods.WM_KEYDOWN || message.Msg == NativeMethods.WM_SYSKEYDOWN)
{
if (PreProcessKeyDown(ref message))
return true;
}
}
return base.PreProcessMessage(ref message);
}