シリーズ仕様書からプログラムソースを生成する方法の続きです。
前回、メニューを追加した場合の、ヘッダの雛形ファイルのソースを載せました。
今回は、ソースの雛形ファイルの部分なのですが、余計なことを書いていると、字数を超えるので、早速本文に入ります。
●ソースの雛形ファイル(gamen_b_c.txt)について
以下のとおりです
/*========================================================= FILE: $#$CELL D2$#$.c ==========================================================*/ #define _$#$CELL K2$#$_C #define _$#$CELL K2$#$_C #include "$#$CELL D2$#$.h" /*==================================*/ // 関数名:$#$CELL D2$#$_HandleEvent // // 内容 :イベント処理 // /*==================================*/ boolean $#$CELL D2$#$_HandleEvent($#$CELL B2$#$* poya, AEEEvent eCode, uint16 wParam, uint32 dwParam) { $#$CELL D2$#$ *pMe; // チェック if ( poya == NULL ) return FALSE; if ( ( poya->gno != 1 )|| ( poya->garea == NULL )) return FALSE; pMe = ($#$CELL D2$#$ *)poya->garea; // 項目NULLチェック $#$REP 5$#$ if ( pMe->$#$KETA B$#$ == NULL ) return FALSE; $#$REPEND A$#$ $#$REP 5$#$ $#$IFKETA C,HTMLCTL$#$ // フォームのデータ取得 IHTMLCTL_HandleEvent(pMe->$#$KETA B$#$,eCode,wParam,dwParam); if ( pMe->$#$KETA B$#$->text_flg != 0 ) { return TRUE; } $#$IFEND$#$ $#$IFKETA C,TEXTCTL$#$ // テキストエリア if ( ITEXTCTL_HandleEvent(pMe->$#$KETA B$#$,eCode,wParam,dwParam) == TRUE ) { return TRUE; } $#$IFEND$#$ $#$IFKETA C,MENUCTL$#$ // メニュー if ( IMENUCTL_HandleEvent(pMe->$#$KETA B$#$,eCode,wParam,dwParam) == TRUE ) { return TRUE; } $#$IFEND$#$ $#$REPEND A$#$ // 処理する switch(eCode) { case EVT_KEY: // カーソル移動に関するキーイベント処理 switch(wParam) { case AVK_SELECT: // 選択キーが押されたときの // 処理を書く break; case AVK_UP: // UPキーが押されたときの // 処理を書く(たいてい、以下のとおり) pMe->curno = $#$CELL D2$#$_NextCurItem(pMe,AVK_UP); $#$CELL D2$#$_DispAppData(pMe); return TRUE; case AVK_DOWN: // Downキーが押されたときの // 処理を書く(たいてい、以下のとおり) pMe->curno = $#$CELL D2$#$_NextCurItem(pMe,AVK_DOWN); $#$CELL D2$#$_DispAppData(pMe); return TRUE; } } return FALSE; } /*==================================*/ //関数名:$#$CELL D2$#$_InitAppData // //内容 :領域確保・描画 // /*==================================*/ boolean $#$CELL D2$#$_InitAppData($#$CELL B2$#$* poya) { char *fdata; $#$CELL D2$#$ *pMe; AEERect rect; AECHAR *menubuf; char *menuTitle; //==========================================// // 領域確保 // //==========================================// pMe = ($#$CELL D2$#$ *)MALLOC(sizeof($#$CELL D2$#$)); if (pMe == NULL ) { $#$CELL D2$#$_FreeAppData(poya); return FALSE; } // アプリ領域へ設定 poya->garea = (void *)pMe; poya->gno = $#$CELL H2$#$; // 初期設定 $#$REP 5$#$ pMe->$#$KETA B$#$ = NULL; $#$REPEND A$#$ pMe->pIDisplay = poya->pIDisplay; pMe->pIShell = poya->pIShell; $#$REP 5$#$ $#$IFKETA C,HTMLCTL$#$ //==========================================// // 表示するHTMLファイルの取得 // //==========================================// fdata = IHTMLCTL_GetDispFileData(pMe->pIShell,"$#$KETA H$#$"); if (fdata == NULL ) { $#$CELL D2$#$_FreeAppData(poya); return FALSE; } //==========================================// // HTMLViewer生成 // //==========================================// // 読み込んだfdataをHTMLViewerに設定する if ( (pMe->$#$KETA B$#$ = IHTMLCTL_Create(pMe->pIShell,pMe->pIDisplay)) == NULL ) { FREEIF(fdata); $#$CELL D2$#$_FreeAppData(poya); return FALSE; } //==========================================// // HTMLViewerデータ設定 // //==========================================// if ( IHTMLCTL_SetDispData(pMe->$#$KETA B$#$,fdata) != TRUE) { FREEIF(fdata); $#$CELL D2$#$_FreeAppData(poya); return FALSE; } //==========================================// // 追加:HTMLViewer大きさ設定 // //==========================================// rect.x = $#$KETA D$#$; rect.y = $#$KETA E$#$; rect.dx = $#$KETA F$#$; rect.dy = $#$KETA G$#$; IHTMLCTL_SetRect(pMe->$#$KETA B$#$,&rect); //==========================================// // HTMLViewer表示・メモリ解放 // //==========================================// FREEIF(fdata); $#$IFEND$#$ $#$IFKETA C,TEXTCTL$#$ //==========================================// // テキストエリア設定 // //==========================================// if ( ISHELL_CreateInstance( pMe->pIShell, AEECLSID_TEXTCTL, (void**)&pMe->$#$KETA B$#$ ) != SUCCESS ) { $#$CELL D2$#$_FreeAppData(poya); return FALSE; } rect.x = $#$KETA D$#$; rect.y = $#$KETA E$#$; rect.dx = $#$KETA F$#$; rect.dy = $#$KETA G$#$; ITEXTCTL_SetRect(pMe->$#$KETA B$#$,&rect); ITEXTCTL_SetProperties(pMe->$#$KETA B$#$,TP_FRAME|TP_MULTILINE); $#$IFEND$#$ $#$IFKETA C,MENUCTL$#$ //==========================================// // メニュー設定 // //==========================================// if ( ISHELL_CreateInstance( pMe->pIShell, AEECLSID_MENUCTL, (void**)&pMe->$#$KETA B$#$ ) != SUCCESS ) { $#$CELL D2$#$_FreeAppData(poya); return FALSE; } rect.x = $#$KETA D$#$; rect.y = $#$KETA E$#$; rect.dx = $#$KETA F$#$; rect.dy = $#$KETA G$#$; IMENUCTL_SetRect(pMe->$#$KETA B$#$,&rect); $#$IFEND$#$ $#$REPEND A$#$ $#$IFCELL O3,メニュー一覧$#$ //==========================// // メニュー項目の表示 // //==========================// $#$IFEND$#$ $#$REP 5$#$ $#$IFCELL O3,メニュー一覧$#$ menuTitle = "$#$KETA R$#$"; menubuf = (AECHAR *)MALLOC((STRLEN(menuTitle)+1)*sizeof(AECHAR)); if ( menubuf == NULL ) { $#$CELL D2$#$_FreeAppData(poya); return FALSE; } MEMSET(menubuf,0,(STRLEN(menuTitle)+1)*sizeof(AECHAR)); STREXPAND(menuTitle,STRLEN(menuTitle),menubuf, (STRLEN(menuTitle)+1)*sizeof(AECHAR)); IMENUCTL_AddItem(pMe->$#$KETA P$#$,NULL,NULL,$#$KETA Q$#$,menubuf,NULL); FREEIF(menubuf); $#$IFEND$#$ $#$REPEND O$#$ $#$CELL D2$#$_DispAppData(pMe); // 共通領域を設定 pMe->pMap = poya->pMap; return TRUE; } /*==================================*/ // 関数名:$#$CELL D2$#$_FreeAppData // // 内容 :領域のフリー // /*==================================*/ void $#$CELL D2$#$_FreeAppData($#$CELL B2$#$* poya) { $#$CELL D2$#$ *pMe; // 対象かどうかチェック if ( poya->gno != 1 ) return; if ( poya->garea == NULL ) return; pMe = ($#$CELL D2$#$ *)poya->garea; $#$REP 5$#$ $#$IFKETA C,HTMLCTL$#$ // フリー if ( pMe->$#$KETA B$#$ != NULL ) { IHTMLCTL_Release(pMe->$#$KETA B$#$); pMe->$#$KETA B$#$ = NULL; } $#$IFEND$#$ $#$IFKETA C,TEXTCTL$#$ // テキストフリー if ( pMe->$#$KETA B$#$ != NULL ) { ITEXTCTL_Release(pMe->$#$KETA B$#$); pMe->$#$KETA B$#$ = NULL; } $#$IFEND$#$ $#$IFKETA C,MENUCTL$#$ // メニューフリー if ( pMe->$#$KETA B$#$ != NULL ) { IMENUCTL_Release(pMe->$#$KETA B$#$); pMe->$#$KETA B$#$ = NULL; } $#$IFEND$#$ $#$REPEND A$#$ FREEIF(pMe); // 親のエリアをクリア poya->garea = NULL; } /*==================================*/ // 関数名:$#$CELL D2$#$_DispAppData // // 内容 :画面の初期表示 // /*==================================*/ boolean $#$CELL D2$#$_DispAppData($#$CELL D2$#$* pMe) { int curpos,buhinpos; // 初期化 curpos = 0; buhinpos = 0; //==================================// // リドローする // //==================================// // ここに、 // 1.リドローと、 // 2.次のフォーカス指示を書く $#$REP 5$#$ $#$IFKETA C,HTMLCTL$#$ if ( pMe->$#$KETA B$#$ != NULL ) { // リドロー IHTMLCTL_Redraw(pMe->$#$KETA B$#$); // カーソル番号pMe->curnoを、htmlの項目順に数えた番号に変換する。 // その番号をcurposとすると IHTMLCTL_DispData(pMe->$#$KETA B$#$,curpos,pMe->$#$KETA B$#$->scr); // カーソル番号pMe->curnoから、部品の番号(仕様書のA桁のNo)に // 変換する。その番号をbuhinposだとすると if(buhinpos == $#$KETA A$#$) IHTMLCTL_SetActive(pMe->$#$KETA B$#$,TRUE); else IHTMLCTL_SetActive(pMe->$#$KETA B$#$,FALSE); } $#$IFEND$#$ $#$IFKETA C,TEXTCTL$#$ // テキストエリアのRedrawやUpdateする if ( pMe->$#$KETA B$#$ != NULL ) { // リドロー ITEXTCTL_Redraw(pMe->$#$KETA B$#$); // カーソル番号pMe->curnoから、部品の番号(仕様書のA桁のNo)に // 変換する。その番号をbuhinposだとすると if(buhinpos == $#$KETA A$#$) ITEXTCTL_SetActive(pMe->$#$KETA B$#$,TRUE); else ITEXTCTL_SetActive(pMe->$#$KETA B$#$,FALSE); } $#$IFEND$#$ $#$IFKETA C,MENUCTL$#$ // メニューのRedrawやUpdateする if ( pMe->$#$KETA B$#$ != NULL ) { // リドロー IMENUCTL_Redraw(pMe->$#$KETA B$#$); // カーソル番号pMe->curnoから、部品の番号(仕様書のA桁のNo)に // 変換する。その番号をbuhinposだとすると if(buhinpos == $#$KETA A$#$) IMENUCTL_SetActive(pMe->$#$KETA B$#$,TRUE); else IMENUCTL_SetActive(pMe->$#$KETA B$#$,FALSE); } $#$IFEND$#$ $#$REPEND A$#$ return TRUE; } //=================================*// //関数名:$#$CELL D2$#$_NextCurItem // //内容 :カーソル移動先を求める // //=================================*// int $#$CELL D2$#$_NextCurItem($#$CELL D2$#$* pMe,int flg) { //======================================// // 次のカーソル移動箇所に // // ついて、 // // プログラムを書いてください // //======================================// return 0; // 該当なし } |
(上記 < > ¥ は本当は半角)
赤字は、今回のメニューで追加になったところです。
青字は、公開していたものにバグがあったので、直したところです(現在は、修正された形で、公開しています)
すみませんですm(__)m
ということで、今回は、ここまで