キー入力の取得


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を返す必要がある。
(デフォルトのメッセージ処理を続ける場合はその限りではないが)

目次へ