MFC VC++6.0 XP
「コントロール+Z」が押されたときに処理を入れたいのですが、
以下のコーディングだと、「コントロール+Z」が押されたときに
「VK_CONTROL」がnCharにはいっていて、case文にひっかかりません。
どうすれば、よろしいのでしょうか、詳しい方よろしくおねがいします。
void CXXXView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	switch(nChar) {
	case	'Z':
	      if( GetKeyState( VK_CONTROL ) & 0x8000 ){
			:
			:
		   }
		break ;
	}
	CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}
参考URL
 http://groups.google.co.jp/group/microsoft.public.vc.mfc/browse_thread/thread/5 
4c1127ff48db73d?pli=1
1.PreTranslateMessage内でWM_KEYDOWNを処理
2.GetAsyncKeyState()を使う
これで目的を達成できるのではないでしょうか。
URLが2行に分かれてしまった。(汗)
コピペを使って入力してください。
あと投稿直後に気付きましたが
1または2の方法で実現可能という話で両方必要なわけではありません。
どちらか片方でOKです。
うみんちゅさん、レスありがとうございます。
PreTranslateMessage()内で以下の内で以下の処理をすることで実現できました。
GetAsyncKeyState()は、GetKeyState()でも動作しましたが、同様の記述を
OnKeyDown()内で記述してもダメでした。
重ねてありがとうございました。
if (pMsg->message == WM_KEYDOWN) {//WM_SYSKEYDOWNは、今のところ無視
	switch(pMsg->wParam)
	{
	case 'Z':
		{
			if (::GetAsyncKeyState(VK_CONTROL)) {
			        :
			        :
			        :
			}
		}
		break;
	}
}
アクセラレータにCtrl+Zが登録されていませんか?
デフォルトのままだとID_EDIT_UNDOになっていますが、
これを削除すればOnKeyDownにも来るのではと思います。

 
  
  
  
  