キーイベントを認識するには

[戻る]
まさたか [E-Mail] 2001/04/06(金) 13:10:17
AppWizardにてSDIを製作して基本クラスをCFormViewとしてキーボードからの入力テストを
しているのですが、単にCxxView::OnChar(.....)として現在押されたキーを画面に表示しているのですが
Commandボタンを置いたらキー入力を受け付けなくなりました。

 過去のログからPreTranslateMessage()で取得できると書かれていたのですが、その中にどのようにして
コードを書けば、キーを受け付けられるのでしょうか?取得したいのは仮想キーです。フォーカスがコマンドボタンにあるからなのでしょうか?
よろしくお願いいたします。

まさたか [E-Mail] 2001/04/06(金) 15:22:39
自己レスです。

ごめんなさい。上記の件はPreTranslateMessage()でwParamを取得出来たので
問題無くなりました。

で次なる問題が。。。SHIFTを押しながらAとやると別のプログラムみたいに
複数のキーを認識させる方法が分かりません現在は

switch(pMsg->wParam){
case 'a':
  処理
case 'b':
  処理
}
みたいにして処理しています。最初に出した質問では'a'ではなくVK_Aとしていたため出来なくて
悩んでいました。で複数の時はVK_SHIFT +'a'トやってもだめなんですよね???
どのように対処すればいいのでしょうか?

2001/04/07(土) 08:36:04
> 複数の時はVK_SHIFT +'a'トやってもだめなんですよね???
「VK_SHIFT & VK_A」では無いでしょうか?←試してないです

Bun 2001/04/09(月) 11:33:33
Bunです。こんにちは。
GetKeyState(VK_SHIFT)が使えそうです。
詳細はHELPで検索してみてください。
下記の例はAキーが押された時の”SHIFTキーの状態”
を調べる方法です。
いかがでしょうか?

BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg) 
{

    // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
    if (pMsg->message == WM_KEYDOWN) {

        switch (pMsg->wParam) {
        case 'a':
        case 'A':
            short sKeyState;

            sKeyState = GetKeyState(VK_SHIFT);
            if (sKeyState & 0x80)
            {
                // ここにシフトキーが押されていたら行う処理を記述
            }
            return TRUE;
            break;
        default:
            break;
        }
    }
    
    return CDialog::PreTranslateMessage(pMsg);
}

古いスレッドには追加発言できません。