WikiトップAugust Framework 2.0>AF2_tutorial5

August Framework 2.0 : チュートリアル 5 ~ マウス入力をハンドルする

  1. #include "mglaugust2.h"
  2. // メインフレームクラス
  3. class CMyFrame : public CAugustWindowFrame2
  4. {
  5. private:
  6. CAugustImage2 m_img;
  7. CAugustMouseInput m_mouse;
  8. public:
  9. // 初期化時に呼ばれる
  10. bool OnGraphicInitEnded()
  11. {
  12. // コントロールクラスの登録
  13. RegistControl(&m_img);
  14. RegistControl(&m_mouse);
  15. // 画像の読み込み
  16. m_img.Load("test.jpg");
  17. // マウスクリックハンドラの登録
  18. m_mouse.RegistHandler(
  19. CAugustMouseInput::EVTTYPE_ON_DOWN,
  20. CAugustMouseInput::LBUTTON,
  21. (CAugustMouseInput::CALLBACK_TYPE_MI)&CMyFrame::OnMouseLDown,
  22. this);
  23. return true;
  24. }
  25. // クリック時に呼ばれる
  26. bool OnMouseLDown(int x, int y)
  27. {
  28. if ( x >= 200 && x <= 400 && y >= 100 && y <= 200 )
  29. ::MessageBoxA((HWND)GetHwnd(), "いやーん", "いけないクリック", NULL);
  30. else if ( x >= 200 && x <= 400 && y >= 300 && y <= 400 )
  31. ::MessageBoxA((HWND)GetHwnd(),"そこはだめよ・・・", "いけないクリック", NULL);
  32. return true;
  33. }
  34. };
  35. // WinMain
  36. int APIENTRY WinMain(HINSTANCE hInstance,
  37. HINSTANCE hPrevInstance,
  38. LPSTR lpCmdLine,
  39. int nCmdShow )
  40. {
  41. CMyFrame frame;
  42. frame.Start();
  43. return 0;
  44. }

なんともくだらないプログラムです。(何
男の人は大喜び(?)かも知れませんが女性の人はそうでないかも知れません・・・

適当な画像を用意して、適当にif文の条件式の数値も変えて、遊んでみてください。
メッセージもお好みに。


解説

マウスの入力には CAugustMouseInput と言うクラスを使います。 キーボードの場合と同様に、RegistHandler() を使ってハンドラを登録します。

第一引数には、キーボードの場合同様に ON_DOWN, ON_UP, ON_PRESS が指定可能ですが、これに加えて、
ON_MOVE と言うのも指定可能です。ON_MOVE の場合は、マウスが画面内で移動のあった際にコールバックメソッドを呼びます。

第二引数はどのマウスボタンかを指定します。LBUTTON=左ボタン、RBUTTON=右ボタン、CBUTTON=センター(ホイール)ボタンです。


第三引数はコールバックするメソッド。bool Hoge(int x, int y); な引数、及び復帰値のメソッドです。
第一引数が、ON_DOWN, ON_UP, ON_PRESS の場合は、x, yにはそのイベントが発生した時点でのマウスカーソル位置(画面左上を0,0とした場合の位置)が入ってきます。
タイトルバーのクリック等でもこのイベントは発生し、その場合、xやyには負の値が入ります。

ON_MOVE の場合にはマウスの移動量が入ってきます。また、ON_MOVE で且つ、第二引数が CBUTTON の場合には、x としてホイール移動量が入ります。
ホイール移動量は、ホイールを1ノッチ分動かした際に+1や-1とはならず、+120や-120等のような値になります(この値は、マウスやドライバ等によって異なるようです)。
なお、yの値としては常に-9999(CAugustMouseInput::INVALID_POINT)が入ります。

メソッドの復帰値は、キーボードの場合と同様に、通常はtrueを、プログラムを終了させたい場合はfalseを返します。

第四引数には、呼び出すメソッドのインスタンス(通常はthis)を指定します。


OnMouseLDown() 内にて、MessageBoxA() を呼び出すにあたって、
GetHwnd() と言うメソッドを使用しています。これにより、ウインドウのハンドルを取得する事が可能です。
(なお、GetHwnd() の復帰値はvoid*型なので、HWNDへのキャストが必要です。)