シリーズ「BREWで複数画面を(分割して開発可能な)開発する場合の方法論」で仕様変更(というか1画面追加)というお話をやってます。
前回、仕様を書きましたから、今回は、方針と、新規画面について書きます。
■方針
まず、以下の画面に修正・作成が入ります。
・全体画面
構造体 :共通領域に、ユーザー名追加
イベント:新規画面(gamen10_HandleEvent)呼び出し
・gamen2
・共通領域から、ユーザー名を受け取り表示する
・gamen10
新規作成
で、これらを作る作業手順について考えます。
■作業手順
ふつうなら、
・全体画面を修正し、gamen10のダミー画面を作成
・gamen10を作成
・gamen2を修正(gamen10と同時にできる)
・gamen10とgamen2をあわせる
となるのですが、今回はわけあって(というか、こういうことが多い。こちらのフレームワークにはいれないで、単体で来ることは良くある)、gamen10を単体で作成し、それをあとから、このフレームワークに入れ込むという手順をとることとします。
つまり、はじめにgamen10を作成します。この作業と、全体およびgamen2作成作業は同時にできます(というか、gamen10作成作業は、何にも邪魔されずにできます)
■新規画面を作成する
で、gamen10を作成します。
今回、ヘッダと関数を分けました。ヘッダはgamen10.h、関数はgamen10.cに書きました。
ソースは下記リンク先を参照。
gamen10.c
gamen10.h
で、ここでヘッダについては、テキストとメニューのコントロールのほかには単に
int curno
というのが追加されていて、それは、現在の項目の番号
(テキストのほうにフォーカスが当たってたら0、メニューのほうだったら1)
というだけなので、説明は省略して、gamen10.cのほうを説明します。
■コントロールを使う場合のカーソル移動など
で、gamen10.cの関数は、
boolean gamen10_HandleEvent(gamen10* pMe, AEEEvent eCode,uint16 wParam, uint32 dwParam);
boolean gamen10_InitAppData(gamen10* pMe);
void gamen10_FreeAppData(gamen10* pMe);
boolean gamen10_DispAppData(gamen10* pMe);
int gamen10_NextCurItem(gamen10* pMe,int flg);
とあるのですが、このうち、gamen10_InitAppDataは、ご覧のとおり、テキストコントロールとメニューコントロールを生成してるだけだし、gamen10_FreeAppDataは、単純に解放しているだけなので、ここでは、HandleEventとDispAppData、NextCurItemについてとりあげます。
●gamen10_HandleEvent
上下左右キーが押された場合は、
pMe->curno = gamen10_NextCurItem(pMe,wParam);
で、次のカーソルの位置を求め、
gamen10_DispAppData
で再描画します
メニューのコマンド(EVT_COMMAND)について、画面1の表示に関しては、今回のではやっていません(結合時のソース編集で行います)。
終了する場合は、gamen10_FreeAppDataでメモリ解放したらISHELL_CloseAppletで終了します。
●gamen10_DispAppData
これで再描画します。このとき、カーソルが移動します。
方法は、
コントロールについて
Redrawします
カーソルが対象だったら(pMe->curnoが、その項目の番号だったら)
IsActive(TRUE)して、カーソルをもってきます
それ以外ならFALSE
コントロール以外(文字、絵など)
ここで、書き直した後IDisplay_Updateします。
こうすると、コントロールもコントロール以外も再描画され、
pMe->curnoの項目にカーソルがきます。
●gamen10_NextCurItem
現在のカーソル番号から次のカーソル番号を導き出します。
といっても、今回の場合、どのキーをおされても0なら1、1なら0なので、
(2つしかないので)そのように、書いてあります。
ということで、今回はここまで。
次回のこのコーナーは、全体部分などの修正です