private bool PreProcessKeyDown(ref Message message)
{
Keys keyData = (Keys)(int) message.WParam | ModifierKeys;
if (state == State.Hot)
{
int hotItem = this.GetHotItem();
if (hotItem != -1)
{
if (keyData == Keys.Left)
{
this.SetHotItem(this.GetPreviousItem(hotItem));
return true;
}
if (keyData == Keys.Right)
{
this.SetHotItem(this.GetNextItem(hotItem));
return true;
}
if ((keyData == Keys.Up) || (keyData == Keys.Down) || (keyData == Keys.Enter))
{
this.TrackDropDown(hotItem);
return true;
}
}
if (keyData == Keys.Escape)
{
this.SetState(State.None, -1);
return true;
}
}
bool alt = ((keyData & Keys.Alt) != 0);
if ((state == State.Hot) || (alt))
{
Keys keyCode = keyData & Keys.KeyCode;
char key = (char) (int) keyCode;
if ((Char.IsDigit(key) || (Char.IsLetter(key))))
{
// Process mnemonics.
if (this.PreProcessMnemonic(keyCode))
return true;
if ((state == State.Hot) && (!alt))
{
NativeMethods.MessageBeep(0);
return true;
}
}
}
// return to default state if not handled
if (state != State.None)
{
this.SetState(State.None, -1);
}
return false;
}