Tabキーを押したときのメッセージの取得方法
キーを押した場合のメッセージは通常CWnd::OnKeyDown関数で取得することができるが、Tabキーを押した場合、
WM_KEYDOWNメッセージが発行されているにも関わらずOnKeyDown関数で取得することができない。
そこで、以下の処理が必要となる。
BOOL CMyEdit::PreTranslateMessage(MSG* pMsg)
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam) {
case VK_TAB:
// ここに処理を記述する
// ……
return TRUE;
}
}
return CEdit::PreTranslateMessage(pMsg);
}
なお、PreTranslateMessage関数でメッセージを処理した場合はTRUEを返す必要がある。
(デフォルトのメッセージ処理を続ける場合はその限りではないが)
目次へ
コントロールでのキー入力を親ウィンドウで検知する
ダイアログやフォームビューにエディットボックスやボタンなどのコントロールを貼り付けた場合、
それらのコントロールにフォーカスがあるとダイアログやフォームビューのOnKeyDown関数や
OnKeyUp関数ではキー入力を検知することができない。
これを親ウィンドウで検知するにはPreTranslateMessage関数を使用すればよい。
BOOL CMyFormView::PreTranslateMessage(MSG* pMsg)
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam) {
case VK_F1:
// ここに処理を記述する
// ……
return TRUE;
// ……
}
}
return CEdit::PreTranslateMessage(pMsg);
}
なお、PreTranslateMessage関数でメッセージを処理した場合はTRUEを返す必要がある。
(デフォルトのメッセージ処理を続ける場合はその限りではないが)
目次へ