我已经开始使用嵌入式SharpDx RenderControl处理WinForms项目。它是这样开始的:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
using(var game = new VisionQuestGame())
{
var form = new FMain(game.Data);
form.Show();
game.IsMouseVisible = true;
game.Run(form.RenderControl);
}
}
}
VisionQuestGame类继承自SharpDx.Toolkit.Game。
问题是现在Tab键不起作用,而且alt-F4等组合键也不起作用。我已经发现我可以像这样克服Tab问题:
public bool PreFilterMessage(ref Message m)
{
if ((m.Msg == 256 || m.Msg == 257) && m.WParam.ToInt32() == (int) Keys.Tab)
{
if (m.Msg == 256 && (ModifierKeys == Keys.None || ModifierKeys == Keys.Shift))
SelectNextControl(ActiveControl, ModifierKeys == Keys.None, true, true, true);
return true;
}
return false;
}
不幸的是,没有任何alt-F4组合键会以这种方式推动。
我很感激您的任何反馈!
答案 0 :(得分:0)
进行以下尝试。它在WinForms获取它的脏爪子之前拦截了按键:)它处理ALT + F4以及Tab,并消耗按键。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Alt | Keys.F4))
{
MessageBox.Show("Don't Quit!");
return true;
}
else if (keyData == Keys.Tab)
{
MessageBox.Show("Just keeping tabs!");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}