キーを押したときに、処理をさせるには?

[戻る]
@風 2001/08/08(水) 09:24:19
お世話になります、@風です。
現在、MFCを使わないでプログラムを組む勉強をしています。
そこで質問なんですが、1個親Windowを作って、ボタンコントロール、エディットコントロール、リストボックスコントロールをCreateWindowで貼り付けています。
親Windowは最大化しており、この親Windowに上記コントロールを順に貼り付けています。
コントロールは大きさを調整して、画面いっぱい(つまり、親Windowを覆い尽くすように)に貼り付けています。
そして、リストボックスにフォーカスを設定しています。

ここで「A」キーを押した時に、ある処理をさせたいと思い、次のようなコードを書いたのですが、
うまく動作しません。mfcであればPretranslateMessageでいけるとは思うのですが、mfcを使わずに上記処理を実現するにはどうすればいいのでしょうか?

どなたかご教授くださいませ

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   int wmId, wmEvent;
   
   switch (message) 
   {
        case WM_COMMAND:
          wmId    = LOWORD(wParam); 
          wmEvent = HIWORD(wParam);     
            
          switch (wmId)
          {
                     (省略)
             default:
                return DefWindowProc(hWnd, message, wParam, lParam);

      }
     break;


    case WM_KEYDOWN:
          switch(wmId)
          {
             case 0x41:
                (処理)
                 break;
          }
          break;
          

          default:
            return DefWindowProc(hWnd, message, wParam, lParam);
          }
    return 0;
}

Bun 2001/08/08(水) 11:20:25
> mfcであればPretranslateMessageでいけるとは思うのですが

であれば文字通り

GetMessage()と

TranslateMessage()の間で処理されてはいかがでしょうか?

はずしていたら、ゴメンナサイ。

TURITURI 2001/08/09(木) 00:05:17
書いてあるプロシージャは親のプロシージャですよね。
でリストにフォーカスがあるときですよね。

Bunさんの方法で出来るかどうかはわかってないんですが、
私がやるとしたらリストボックスをサブクラス化します。

親のプロシージャに書いてもリストボックスにフォーカスがある場合
親のプロシージャには入ってきません。
フォーカスを持っているウィンドウにWM_KEYDOWN等を投げます。

リストボックスのWM_KEYDOWNで自分がやりたいことをするのなら
サブクラス化してやれば出来ると思います。

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