シリーズBREWでiアプリ統合作成ツールのための、1イベント1関数化のつづきです。
前回は、1イベント1関数で、1つのクラス(ファイル)に、複数イベント関数を書けるケースについてやりました。
今回は、そのイベント処理を階層化することについて、考えます。
■BREWアプリにおける階層とは
「階層的にイベントを処理する」ことを考える前に、まず、
階層について、考えます。そうすると、こんな感じになると思います
アプリ
|
画 面
|
コントロール
1つのアプリに複数の画面があって、複数のコントロールがあるという
イメージです。
■階層的にイベントを発生させるには
ということは、階層的にするには、
1.まず、アプリのイベント処理で、各画面のイベント処理をしてから、
それで処理し切れなかったら、アプリのイベント処理をします。
つまり、イメージ的に書くとこんなかんじ
アプリ_HandleEvent { for(i = 0 ; i < 画面数 ; i ++ ) |
2.各画面のハンドル処理では、各コントロールのイベント処理をしてから、
それで処理し切れなかったら、各画面自身のイベント処理をします。
つまり、イメージ的に書くとこんなかんじ
画面_HandleEvent { for(i = 0 ; i < コントロール数 ; i ++ ) |
■まず、1.アプリのイベント処理を考える
このうち、アプリのイベント処理を考えます。
ここで、まじめに、上記のようにイベント処理をするとすると、
●1.initAppDataで、
・画面用のイベント処理関数の登録と
//画面番号10番の場合
IEVENTLIST_Add(pMe->pElist,pMe,IEVENTLIST_KIND_GAMEN,10,
0,0,gamen10_HandleEvent);
・アプリののイベント処理関数の登録
IEVENTLIST_Add(pMe->pElist,pMe,IEVENTLIST_KIND_ECODE,EVT_APP_START,
0,0,event1_STARTEvent);
をして
●アプリのHandleEventで、画面用の処理をして、
static boolean event1_HandleEvent(event1* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam) { if ( pMe == NULL ) return FALSE; if ( pMe->pElist == NULL ) return FALSE; //画面用イベント処理 if ( IEVENTLIST_DispHandleEvent(pMe->pElist,pMe->gno, eCode,wParam,dwParam) == true ) return TRUE; return IEVENTLIST_HandleEvent(pMe->pElist,eCode,wParam,dwParam); } |
●アプリのFreeAppDataで解放すれば
void event1_FreeAppData(event1* pMe)
{
IEVENTLIST_Release(pMe->pElist);
}
できることはできるのですが。。。
以下、次回のこのシリーズに続く