dポイントプレゼントキャンペーン実施中!

WinXP + BCC でCのプログラムを作成しています。
ダイヤログボックス内のマウスイベントの処理で、ALTキーが押されている場合と押されていない場合で処理を変えたいのです。
alt_downという変数を用意してみましたがダメでした。

case WM_MOUSEMOVE:
 if(alt_down == 1) {
  ALTキーが押されているときの処理
 } else {
  ALTキーが押されていないときの処理
 }
 break;
case WM_SYSKEYDOWN:
 if(wParam == VK_MENU) alt_down=1;
 break;
case WM_SYSKEYUP:
 if(wParam == VK_MENU) alt_down=0;
 break;

A 回答 (3件)

WM_MOUSEMOVE処理時に、GetKeyState/GetKeyboardState/GetAsyncKeyStateなどのAPIでAltキーの状態を確認してはどうでしょうか。

    • good
    • 0
この回答へのお礼

ありがとうございます。以下のように
alt_down = (GetKeyState(VK_MENU)<0)? 1: 0;
を追加したら、希望する動作になりました。
(ほかでもalt_downの値を使うため)

case WM_MOUSEMOVE:
 alt_down = (GetKeyState(VK_MENU)<0)? 1: 0;
 if(alt_down == 1) {
  ALTキーが押されているときの処理
 } else {
  ALTキーが押されていないときの処理
 }
 break;

お礼日時:2009/10/20 19:14

ダイアログはどうやって作ってますか


メインウィンドウからモードレスダイアログを開いていればメインのの方にメッセージが行ってるかもしれません
メインループで
IsDialogMessage
を使う必要があります
    • good
    • 0

alt_down が自動変数で値が保持されてないとかではないですか。

この回答への補足

回答ありがとうございます。
alt_downは自動変数ではありません。
問題は、ALTキーを押しても
case WM_SYSKEYDOWN:
に飛んで来ない事のようです。

飛んでこなくても、私のやりたいことは、
case WM_MOUSEMOVE:
に来たとき、ALTキーの押し下げ状態がわかる関数がほしいのですが・・・

補足日時:2009/10/20 07:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!