ホームへ戻る

 4.7章 マウスの入力状態を取得する

 次はマウスの入力状態を取得してみましょう。
マウス関連の関数は主に5つあります。

SetMouseDispFlag()
GetMousePoint()
SetMousePoint()
GetMouseInput()
GetMouseWheelRotVol()
マウスカーソルの表示設定フラグのセット
マウスカーソルの位置を取得する
マウスカーソルの位置をセットする
マウスカーソルのボタンの状態を得る
マウスホイールの回転量を得る


それぞれ、リファレンスを確認して下さい。

今回は、位置の取得、ボタンの状態取得、ホイールの回転量取得 をやってみましょう。

宣言 int GetMousePoint( int *XBuf, int *YBuf );

概略 マウスカーソルの位置を取得する

引数 XBuf ,YBuf : マウスカーソル現在地のX座標とY座標を保存する
      int型変数のポインタ


宣言 int GetMouseWheelRotVol( void ) ;

概略 マウスホイールの回転量を得る

引数 なし
戻り値 マウスの入力状態値

解説  前回この関数が呼ばれてから今回この関数が呼ばれるまでにマウスホイールが回転した量を得ます。
 手前に回した分はマイナスの値として、奥に回した分はプラスの値として返ってきます。


リファレンスにはそれぞれ上記のように書かれています。
これらはそのままの意味なので特に説明は必要ないかと思います。詳細はサンプルと合わせて確認していきましょう。

次にマウスのボタンの入力状態ですが

宣言 int GetMouseInput( void ) ;

概略 マウスカーソルのボタンの状態を得る

引数 なし
戻り値 マウスの入力状態値


この関数の仕様はジョイパッドの時とほぼ同じです。

int Mouse = GetMouseInput();
if( Mouse & MOUSE_INPUT_LEFT ){
  //左クリック
}

このようにすることで、マウスの左ボタンが押されたことが分かります。
ボタンの定義は以下のようになっていて、最大8つまでボタンの識別が可能です。

MOUSE_INPUT_LEFT
MOUSE_INPUT_RIGHT
MOUSE_INPUT_MIDDLE
MOUSE_INPUT_4
MOUSE_INPUT_5
MOUSE_INPUT_6
MOUSE_INPUT_7
MOUSE_INPUT_8
 
マウス左ボタン
マウス右ボタン
マウス中央ボタン
マウスボタン4
マウスボタン5
マウスボタン6
マウスボタン7
マウスボタン8
 


では、これらの関数を使って、マウスの位置に画像を表示し、ホイールの回転で画像の拡大縮小を行い、
左クリック・右クリックでそれぞれ入力されたことを画面に表示するサンプルを書いてみます。


#include "DxLib.h"

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更,初期化,裏画面設定

        int x,y,Mouse,Wheel,Image;
        double size=1.0;

        Image = LoadGraph("画像/キャラクタ01.png");//画像ロード

        // while( 裏画面を表画面に反映, メッセージ処理, 画面クリア )
        while( !ScreenFlip() && !ProcessMessage() && !ClearDrawScreen() ){
                Mouse = GetMouseInput();                //マウスの入力状態取得
                Wheel = GetMouseWheelRotVol();  //ホイールの回転量取得
                GetMousePoint( &x, &y );                //マウスの座標取得
                if( Mouse & MOUSE_INPUT_LEFT ){ //マウスの左ボタンが押されていたら
                        DrawString( 0, 0, "左ボタンが押されています", GetColor(255,255,255) );
                }
                if( Wheel > 0 ){        //ホイールが+方向に回転していたら
                        size += 0.1;
                }
                if( Wheel < 0 ){        //ホイールが-方向に回転していたら
                        size -= 0.1;
                }
                DrawRotaGraph( x, y, size, 0.0, Image, TRUE );  //画像をx,yの位置にサイズsizeで描画
        }

        DxLib_End();
        return 0;
}

実行結果


GetMousePoint関数 の引数はポインタであることに注意して下さい。
変数にアンパサント(&)を付けることで、変数のアドレスを示すことが出来ます。
普通関数の引数に変数を指定すると、その関数先では変数のコピーになりますが、
ポインタを使って変数のアドレスを指定することで、それそのものの値が変更出来、
すなわち関数に渡したx,y変数に座標を格納して返すことが可能になります。

→分からないことがあれば掲示板で質問して下さい


- Remical Soft -