WikiトップAugust Framework>AF_チュートリアル2

August Framework : チュートリアル 2 ~ もうちょっと動きのあるプログラムを作ってみる(マウスイベント編)

(本項で説明する機能は ver 0.7.0 以降でのみ使えます。)

前回

August FrameworkではMFCのイベントハンドラのようにして処理を記述していきます。
まぁMFCでは、メッセージ系だとClass Wizard使ってClass Wizardが自前でメソッドを用意するわけですが、
August Frameworkでは予め全てのメソッドが用意されていてそれをオーバーライドするだけ、ってのが違いますかね。

前回のサンプルではOnInit()とOnCreateWindow()をオーバーライドしました。これらも一つのイベントハンドラ。
OnInit()はStart()後の初期化処理で、OnCreateWindow()はウインドウを作成する時(作成前に)呼ばれます。

今回は「もうちょっと動きのあるプログラムを作ってみる(マウスイベント編)」ということで、マウスイベントをハンドルしてみます。

  1. #include "stdafx.h"
  2. // メインフレームクラス
  3. class CMglTestFrame : public CMglguiWindow
  4. {
  5. private:
  6. CMglAghImage m_img;
  7. public:
  8. // 初期化時に呼ばれる
  9. void OnInit(){
  10. m_img.Load("test.jpg");
  11. CMglguiWindow::RegistControl(&m_img);
  12. }
  13. // クリック時に呼ばれる
  14. void OnLButtonDown(int x, int y){
  15. ::MessageBox(NULL,"test","test",NULL);
  16. }
  17. };
  18. CMglTestFrame g_frame;
  19. // WinMain
  20. int APIENTRY WinMain(HINSTANCE hInstance,
  21. HINSTANCE hPrevInstance,
  22. LPSTR lpCmdLine,
  23. int nCmdShow )
  24. {
  25. g_frame.Start();
  26. return 0;
  27. }

test.jpgの画像以外をクリックすると「test」と言うメッセージボックスが表示されてかと思います。

ちなみに画像(CMglAghImage)の方も、マウスイベントをハンドル出来ます。
・・・ただ、CMglTestFrame(CMglguiWindowを継承したクラス)側でこれを記述する事は出来ません。
MFC同様に、CMglAghImageを継承したクラスを作成し、この中でハンドルメソッドの記述を行います。

  1. #include "stdafx.h"
  2. // soutei.bmpの画像クラス
  3. class CImgSoutei : public CMglAghImage
  4. {
  5. public:
  6. // コンストラクタ内にて画像ファイルをロードするようにしてみた。
  7. CImgSoutei(){
  8. Load("soutei.bmp");
  9. }
  10. // クリック時に呼ばれる
  11. void OnLButtonDown(int x, int y){
  12. ::MessageBox(NULL,"想定の範囲内です。","想定していましたか?",NULL);
  13. }
  14. };
  15. // メインフレームクラス
  16. class CMglTestFrame : public CMglguiWindow
  17. {
  18. private:
  19. CImgSoutei m_img;
  20. public:
  21. // 初期化時に呼ばれる
  22. void OnInit(){
  23. CMglguiWindow::RegistControl(&m_img);
  24. }
  25. // ウインドウ生成前に呼ばれる
  26. void OnCreateWindow(agh::CREATE_WINDOW_INFO *pWindowInfo){
  27. pWindowInfo->strWindowTitle = "ライ○ドアプログラム";
  28. }
  29. // クリック時に呼ばれる
  30. void OnLButtonDown(int x, int y){
  31. ::MessageBox(NULL,"想定の範囲外です。","想定していましたか?",NULL);
  32. }
  33. };
  34. CMglTestFrame g_frame;
  35. // WinMain
  36. int APIENTRY WinMain(HINSTANCE hInstance,
  37. HINSTANCE hPrevInstance,
  38. LPSTR lpCmdLine,
  39. int nCmdShow )
  40. {
  41. g_frame.Start();
  42. return 0;
  43. }

lixxdoor.jpg

・・・なかなかに酷いサンプルプログラムですが。(何

こちらに関しても「soutei.bmp」は自前で適当に用意してください。
なお、一応簡単に解説しておきますと、画像をクリックすると「想定の範囲内です。」と、画像以外をクリックすると「想定の範囲外です。」と言うメッセージボックスが表示されます。
あと、Loadはコンストラクタ内でも書ける(と言うか本来はそうするべきな仕様・・・)ので、今回はそうしています。