2014-09-16 2 views
0

SharpDx RenderControl이 포함 된 WinForms 프로젝트에서 작업하기 시작했습니다. 이 같은 시작됩니다 :WinForms에서 탭 및 alt + 키를 잃었습니다

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와 같은 키 조합도 작동하지 않습니다. 내가 탭 문제 때문에 같이 극복 할 수 있음을 알아 냈어요 :

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

메시지 루프 문제입니다. VisionQuestGame 클래스가 수행 할 수있는 작업과 Run() 메서드가 Application.Run()이 수행하는 작업과 비슷한 작업을 수행하는지 여부는 매우 명확하지 않습니다. 글쎄요, 그렇지 않을 수도 있습니다. –

+0

감사합니다. 한스. 질문을 간략하게 업데이트했습니다. 게임 클래스에는 키보드가 자체 방식으로 노출되는 메서드가 있습니다. 나는 그걸로 살 수 있다고 생각해. 가장 문제가되었던 부분은 탭 키가 전체 형식에 맞지 않아서 고정되었지만 (그리고 미래의 spelunkers를 위해 문서화했습니다) –

답변

0

다음 시도해주세요. 그것은 WinForms 그것이 더러운 발을 참여하게하기 전에 keypresses를 가로 챕니다. 이것은 Tab뿐만 아니라 Alt + F4를 처리하고 keypresses를 소모합니다.

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); 
} 
+0

아니요, 시도했습니다. Tab 키조차도 그렇게하지 않았습니다. 그래서 PreFilterMessage를 사용했습니다. –

+0

오, 나는 game.Run (form.RenderControl);을 보았고 지금은 (한스의 코멘트). 'ProcessCmdKey'는 winforms 메시지 루프가 필요합니다. – helrich