キーを押したときに、処理をさせるには? – プログラミング – Home

キーを押したときに、処理をさせるには?
 
通知
すべてクリア

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


@風
 @風
(@@風)
ゲスト
結合: 23年前
投稿: 1
Topic starter  

お世話になります、@風です。
現在、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
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

> mfcであればPretranslateMessageでいけるとは思うのですが

であれば文字通り

GetMessage()と

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

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


返信引用
TURITURI
 TURITURI
(@TURITURI)
ゲスト
結合: 23年前
投稿: 3
 

書いてあるプロシージャは親のプロシージャですよね。
でリストにフォーカスがあるときですよね。

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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