「コントロール+Z」 – プログラミング – Home

通知
すべてクリア

[解決済] 「コントロール+Z」


熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

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);
}


引用未解決
トピックタグ
うみんちゅ
 うみんちゅ
(@うみんちゅ)
ゲスト
結合: 16年前
投稿: 15
 

参考URL
http://groups.google.co.jp/group/microsoft.public.vc.mfc/browse_thread/thread/5
4c1127ff48db73d?pli=1

1.PreTranslateMessage内でWM_KEYDOWNを処理
2.GetAsyncKeyState()を使う

これで目的を達成できるのではないでしょうか。


返信引用
うみんちゅ
 うみんちゅ
(@うみんちゅ)
ゲスト
結合: 16年前
投稿: 15
 

URLが2行に分かれてしまった。(汗)
コピペを使って入力してください。

あと投稿直後に気付きましたが
1または2の方法で実現可能という話で両方必要なわけではありません。
どちらか片方でOKです。


返信引用
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

うみんちゅさん、レスありがとうございます。

PreTranslateMessage()内で以下の内で以下の処理をすることで実現できました。
GetAsyncKeyState()は、GetKeyState()でも動作しましたが、同様の記述を
OnKeyDown()内で記述してもダメでした。

重ねてありがとうございました。

if (pMsg->message == WM_KEYDOWN) {//WM_SYSKEYDOWNは、今のところ無視
switch(pMsg->wParam)
{
case 'Z':
{
if (::GetAsyncKeyState(VK_CONTROL)) {
        :
        :
        :
}
}
break;
}
}


返信引用
HT
 HT
(@HT)
ゲスト
結合: 15年前
投稿: 1
 

アクセラレータにCtrl+Zが登録されていませんか?
デフォルトのままだとID_EDIT_UNDOになっていますが、
これを削除すればOnKeyDownにも来るのではと思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました