WikiトップAugust Framework 2.0>AF2_tutorial4

August Framework 2.0 : チュートリアル 4 ~ キーボード入力をハンドルする

  1. #include "mglaugust2.h"
  2. class CMyFrame : public CAugustWindowFrame2
  3. {
  4. private:
  5. CAugustImage2 m_img;
  6. CAugustKeyboardInput m_kb;
  7. public:
  8. // 初期化時に呼ばれる
  9. bool OnGraphicInitEnded()
  10. {
  11. RegistControl(&m_img);
  12. RegistControl(&m_kb);
  13. m_img.Load("test.jpg");
  14. // キーボードイベントハンドラ登録(左)- 押している間移動
  15. m_kb.RegistHandler(
  16. CAugustKeyboardInput::ON_PRESS,
  17. AGH_KEYCODE_LEFT,
  18. (CAugustKeyboardInput::CALLBACK_TYPE_MI)&CMyFrame::MoveLeft,
  19. this);
  20. // キーボードイベントハンドラ登録(右)- 押している間移動
  21. m_kb.RegistHandler(
  22. CAugustKeyboardInput::ON_PRESS,
  23. AGH_KEYCODE_RIGHT,
  24. (CAugustKeyboardInput::CALLBACK_TYPE_MI)&CMyFrame::MoveRight,
  25. this);
  26. // キーボードイベントハンドラ登録(上)- 離した瞬間だけ移動
  27. m_kb.RegistHandler(
  28. CAugustKeyboardInput::ON_UP,
  29. AGH_KEYCODE_UP,
  30. (CAugustKeyboardInput::CALLBACK_TYPE_MI)&CMyFrame::MoveUp,
  31. this);
  32. // キーボードイベントハンドラ登録(下)- 押した瞬間だけ移動
  33. m_kb.RegistHandler(
  34. CAugustKeyboardInput::ON_DOWN,
  35. AGH_KEYCODE_DOWN,
  36. (CAugustKeyboardInput::CALLBACK_TYPE_MI)&CMyFrame::MoveDown,
  37. this);
  38. return true;
  39. }
  40. // 各ハンドラメソッド
  41. bool MoveLeft(){
  42. m_img.Move(-1,0);
  43. return true;
  44. }
  45. bool MoveRight(){
  46. m_img.Move(1,0);
  47. return true;
  48. }
  49. bool MoveUp(){
  50. m_img.Move(0,-10);
  51. return true;
  52. }
  53. bool MoveDown(){
  54. m_img.Move(0,10);
  55. return true;
  56. }
  57. };
  58. // WinMain
  59. int APIENTRY WinMain(HINSTANCE hInstance,
  60. HINSTANCE hPrevInstance,
  61. LPSTR lpCmdLine,
  62. int nCmdShow )
  63. {
  64. CMyFrame frame;
  65. frame.Start();
  66. return 0;
  67. }

キーボード入力を扱うには CAugustKeyboardInput というコントロールクラスを使います。

まずは OnGraphicInitEnded() 内で RegistControl() をし・・・
その後、m_kb.RegistHandler() と言うメソッドを呼び出しています。

第一引数はイベントの契機。CAugustKeyboardInput::ON_DOWN の他に、ON_UP、ON_PRESS があります。
それぞれ、

  • ON_DOWN : キーが押された瞬間
  • ON_UP : キーが放された瞬間
  • ON_PRESS : キーが押され続けてる間

です。

第二引数はどのキー入力に反応するか。
通常のアルファベットや数字は直接char型の値('A'みたいな感じ)で指定出来ます。
それ以外の特殊なキー入力(例えば矢印キーなど)はagh_KeyCode.hに定義されています。

第三引数は、キーボードイベント発生時に呼び出すコールバックメソッドの関数ポインタです。
引数なし、復帰値がbool型であるメソッドを指定し、上記例のようにキャストが必要です。
復帰値としては通常trueを返すようにしますが、falseを返すことにより、プログラムを終了させられます。

第四引数にはクラスインスタンスを指定します。通常は「this」となる事でしょう。


コードの記述を完了したら、ビルドし、実行してみましょう。

今回のサンプルコードでは、十字キーの左右が押されている間左右に、
上キーが離された瞬間上に、下キーが押された瞬間下に移動するようになっています。