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にも来るのではと思います。