お世話になります、@風です。
現在、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;
}
> mfcであればPretranslateMessageでいけるとは思うのですが
であれば文字通り
GetMessage()と
TranslateMessage()の間で処理されてはいかがでしょうか?
はずしていたら、ゴメンナサイ。
書いてあるプロシージャは親のプロシージャですよね。
でリストにフォーカスがあるときですよね。
Bunさんの方法で出来るかどうかはわかってないんですが、
私がやるとしたらリストボックスをサブクラス化します。
親のプロシージャに書いてもリストボックスにフォーカスがある場合
親のプロシージャには入ってきません。
フォーカスを持っているウィンドウにWM_KEYDOWN等を投げます。
リストボックスのWM_KEYDOWNで自分がやりたいことをするのなら
サブクラス化してやれば出来ると思います。