ページ 11

キー入力とマウス取得について

Posted: 2007年12月17日(月) 01:56
by dy
はじめまして。
いつもココで勉強させていただいています。

今回は“指定されたキーを押している状態”で“指定した場所をマウスでドラッグすると中の処理をする”といった機能を付けようと思ったのですが、行き詰ってしまったので相談させて頂きました。
開発環境はVisual Studio 2005です。

現在はキーの取得が

case WM_KEYDOWN:
  if(GetAsyncKeyState (VK_DOWN)){ //下キーが押されている時
    if(wParam=='M') //Mキーが押されている時
    {
      PlaySound(0);
    }
  }
  return 0;

で、マウスのドラッグ処理が

case WM_LBUTTONDOWN:
  MousePress=1;
  return 0;

case WM_LBUTTONUP:
  MousePress=0;
  return 0;

case WM_MOUSEMOVE:
  if(LOWORD(lParam)>490&&LOWORD(lParam)<500)
  {
    if(MousePress==1)
    {
      PlaySound(1);
    }
  }
  return 0;

というソースで、それぞれ動いております。
そして、これに追加して上記のMキーを押した状態で指定座標をドラッグしたときにまた違う音を出したくて
考え付くことはやったのですが中々うまくいきません。

まだ初心者で質問にも至らない点が多いかもしれませんが
よろしければ知恵をお貸しください。

Re:キー入力とマウス取得について

Posted: 2007年12月17日(月) 08:58
by バグ
指定座標上でクリックされているという状態管理用の変数を1つ追加されてはいかがでしょう?
case WM_KEYDOWN: 
  if(GetAsyncKeyState (VK_DOWN)){ //下キーが押されている時 
    if(wParam=='M') //Mキーが押されている時 
    {
            if (MouseMove == TRUE)
            {
                /* 違う曲の演奏処理 */
            }
            else
            {
          PlaySound(0); 
            }
    } 
  } 
  return 0; 

case WM_MOUSEMOVE: 
  if(LOWORD(lParam)>490&&LOWORD(lParam)<500) 
  {
        MouseMove = TRUE;
 
    if(MousePress==1) 
    { 
      PlaySound(1); 
    } 
  }
    else
    {
        MouseMove = FALSE;
    } 
  return 0;

Re:キー入力とマウス取得について

Posted: 2007年12月17日(月) 14:23
by dy
バグさん、ありがとうございました!
今の段階で結構IF文がぐちゃぐちゃしていたので頭の中を整理するのに時間がかかりましたが
よく考えてMouseMove変数を作ったらできるようになりました。
感謝です。また何かあったらよろしくおねがいします。

Re:キー入力とマウス取得について

Posted: 2007年12月17日(月) 14:25
by バグ
プロシージャの中に全部記述するのではなく、メッセージ毎に専用の関数を作成すると管理が楽になりますよ。頑張ってください(^-^)