open-mgl-dev (開発バージョン) (0.7.9.80) | 2009-11-02 22:25 |
open-mgl (DirectX9, VC++2008) (0.7.9) | 2009-09-27 20:32 |
roast-dev (開発バージョン) (0.0.1.40-dev) | 2009-11-02 23:09 |
>Wikiトップ>August Framework>AF_チュートリアル2
(本項で説明する機能は ver 0.7.0 以降でのみ使えます。)
>前回
August FrameworkではMFCのイベントハンドラのようにして処理を記述していきます。
まぁMFCでは、メッセージ系だとClass Wizard使ってClass Wizardが自前でメソッドを用意するわけですが、
August Frameworkでは予め全てのメソッドが用意されていてそれをオーバーライドするだけ、ってのが違いますかね。
前回のサンプルではOnInit()とOnCreateWindow()をオーバーライドしました。これらも一つのイベントハンドラ。
OnInit()はStart()後の初期化処理で、OnCreateWindow()はウインドウを作成する時(作成前に)呼ばれます。
今回は「もうちょっと動きのあるプログラムを作ってみる(マウスイベント編)」ということで、マウスイベントをハンドルしてみます。
- #include "stdafx.h"
- // メインフレームクラス
- class CMglTestFrame : public CMglguiWindow
- {
- private:
- CMglAghImage m_img;
- public:
- // 初期化時に呼ばれる
- void OnInit(){
- m_img.Load("test.jpg");
- CMglguiWindow::RegistControl(&m_img);
- }
- // クリック時に呼ばれる
- void OnLButtonDown(int x, int y){
- ::MessageBox(NULL,"test","test",NULL);
- }
- };
- CMglTestFrame g_frame;
- // WinMain
- int APIENTRY WinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nCmdShow )
- {
- g_frame.Start();
- return 0;
- }
test.jpgの画像以外をクリックすると「test」と言うメッセージボックスが表示されてかと思います。
ちなみに画像(CMglAghImage)の方も、マウスイベントをハンドル出来ます。
・・・ただ、CMglTestFrame(CMglguiWindowを継承したクラス)側でこれを記述する事は出来ません。
MFC同様に、CMglAghImageを継承したクラスを作成し、この中でハンドルメソッドの記述を行います。
- #include "stdafx.h"
- // soutei.bmpの画像クラス
- class CImgSoutei : public CMglAghImage
- {
- public:
- // コンストラクタ内にて画像ファイルをロードするようにしてみた。
- CImgSoutei(){
- Load("soutei.bmp");
- }
- // クリック時に呼ばれる
- void OnLButtonDown(int x, int y){
- ::MessageBox(NULL,"想定の範囲内です。","想定していましたか?",NULL);
- }
- };
- // メインフレームクラス
- class CMglTestFrame : public CMglguiWindow
- {
- private:
- CImgSoutei m_img;
- public:
- // 初期化時に呼ばれる
- void OnInit(){
- CMglguiWindow::RegistControl(&m_img);
- }
- // ウインドウ生成前に呼ばれる
- void OnCreateWindow(agh::CREATE_WINDOW_INFO *pWindowInfo){
- pWindowInfo->strWindowTitle = "ライ○ドアプログラム";
- }
- // クリック時に呼ばれる
- void OnLButtonDown(int x, int y){
- ::MessageBox(NULL,"想定の範囲外です。","想定していましたか?",NULL);
- }
- };
- CMglTestFrame g_frame;
- // WinMain
- int APIENTRY WinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nCmdShow )
- {
- g_frame.Start();
- return 0;
- }
・・・なかなかに酷いサンプルプログラムですが。(何
こちらに関しても「soutei.bmp」は自前で適当に用意してください。
なお、一応簡単に解説しておきますと、画像をクリックすると「想定の範囲内です。」と、画像以外をクリックすると「想定の範囲外です。」と言うメッセージボックスが表示されます。
あと、Loadはコンストラクタ内でも書ける(と言うか本来はそうするべきな仕様・・・)ので、今回はそうしています。