ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

仕様書からプログラムソースを生成する方法(Excelの仕様書編 その18:メニュー追加-雛形その2)

2006-12-08 20:08:25 | ケータイ

シリーズ仕様書からプログラムソースを生成する方法の続きです。
前回、メニューを追加した場合の、ヘッダの雛形ファイルのソースを載せました。
今回は、ソースの雛形ファイルの部分なのですが、余計なことを書いていると、字数を超えるので、早速本文に入ります。




●ソースの雛形ファイル(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




ということで、今回は、ここまで

この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 仕様書からプログラムソース... | トップ | YouTubeが「Streams」サービ... »
最新の画像もっと見る

ケータイ」カテゴリの最新記事