2011-01-21

[C++/MFC] ダイヤログでキーボードイベントを検知する

ちょっとハマったのでメモ書き。MFCのダイヤログウィンドウは、コントロールを一つでも載せるとフォーカスがコントロールに移ってしまい、キーイベントが検知できなくなるという仕様が発覚。まあ、通常はGUIコントロールに対するクリックイベントなどが一般的だからもしれないけど、GUIアプリだってキーコマンド操作する事があったっていいはずだ。今回は、卒研のプログラムでどうしてもキーボードイベントを検知させたい必要性があったわけで、さてどうしたものかと試行錯誤しつつ解を発見。解決策は以下の通り。PreTranslateMessageメソッドを書くことで、イベントメッセージをキャッチできる。
BOOL CkeyTestView::PreTranslateMessage(MSG* pMsg){
 if(pMsg->message == WM_KEYDOWN)
  {
   switch(pMsg->wParam) {
   case VK_TAB:
    CString str="tabが押された";
    AfxMessageBox(str);
    return true;
   }
  }
 else{
  return false;
 }
  
}


0 件のコメント:

コメントを投稿