/*================================
FILE: gamen1.c
=================================*/
#define _GAMEN1_C
#include "gamen1.h"
#include "gamen1event.h" // 追加:イベント処理
/*==================================*/
// 関数名:gamen1_HandleEvent //
// 内容 :イベント処理 //
/*==================================*/
boolean gamen1_HandleEvent(fukusu2* poya, AEEEvent eCode,
uint16 wParam, uint32 dwParam)
{
gamen1 *pMe;
// チェック
if ( poya == NULL )
return FALSE;
if ( ( poya->gno != 1 ) ||
(poya->garea == NULL ))
return FALSE;
pMe = (gamen1 *)poya->garea;
// メニューイベント
if ( pMe->pMenu1 != NULL )
{
if ( IMENUCTL_HandleEvent(pMe->pMenu1,eCode,
wParam,dwParam) == TRUE )
{
return TRUE;
}
}
// 追加:イベント処理
return IEVENTLIST_HandleEvent(pMe->pElist,eCode,wParam,dwParam);
}
/*==================================*/
//関数名:gamen1_InitAppData //
//内容 :領域確保・描画 //
/*==================================*/
boolean gamen1_InitAppData(fukusu2* poya)
{
char *fdata;
gamen1 *pMe;
AEERect rect;
AECHAR *menubuf;
char *menuTitle;
//==========================================//
// 領域確保 //
//==========================================//
pMe = (gamen1 *)MALLOC(sizeof(gamen1));
if (pMe == NULL )
{
gamen1_FreeAppData(poya);
return FALSE;
}
// アプリ領域へ設定
poya->garea = (void *)pMe;
poya->gno = 1;
pMe->pMenu1 = NULL;
pMe->pIDisplay = poya->pIDisplay;
pMe->pIShell = poya->pIShell;
//==========================================//
// 追加:イベント処理 //
//==========================================//
// 親領域の設定(イベント先で使う)
pMe->poya = poya;
// イベント領域確保
if ( (pMe->pElist = IEVENTLIST_Create() ) == NULL )
{
return FALSE;
}
// イベント設定
IEVENTLIST_Add(pMe->Elist,pMe,IEVENTLIST_KIND_ECODE,
EVT_APP_START,0,0,gamen1_STARTEvent);
IEVENTLIST_Add(pMe->Elist,pMe,IEVENTLIST_KIND_WPARAM,
EVT_COMMAND,2000,0,gamen1_EndEvent);
//==========================//
// メニューの作成 //
//==========================//
if ( ISHELL_CreateInstance( pMe->pIShell,
AEECLSID_MENUCTL, (void**)&pMe->pMenu1 ) != SUCCESS )
{
gamen1_FreeAppData(poya);
return FALSE;
}
rect.x = 1;
rect.y = 1;
rect.dx = 200;
rect.dy = 150;
IMENUCTL_SetRect(pMe->pMenu1,&rect);
//==========================//
// メニュー項目の表示 //
//==========================//
menuTitle = "開始";
menubuf = (AECHAR *)MALLOC((STRLEN(menuTitle)+1)*sizeof(AECHAR));
if ( menubuf == NULL )
{
gamen1_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->pMenu1,NULL,NULL,1000,menubuf,NULL);
FREEIF(menubuf);
menuTitle = "終了";
menubuf = (AECHAR *)MALLOC((STRLEN(menuTitle)+1)*sizeof(AECHAR));
if ( menubuf == NULL )
{
gamen1_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->pMenu1,NULL,NULL,2000,menubuf,NULL);
FREEIF(menubuf);
gamen1_DispAppData(pMe);
// 共通領域を設定
// pMe->pMap = poya->pMap;
return TRUE;
}
/*==================================*/
//関数名:gamen1_FreeAppData //
//内容 :領域のフリー //
/*==================================*/
void gamen1_FreeAppData(fukusu2* poya)
{
gamen1 *pMe;
// 対象かどうかチェック
if ( poya->gno != 1 )
return;
if ( poya->garea == NULL )
return;
pMe = (gamen1 *)poya->garea;
// メニューフリー
if ( pMe->pMenu1 != NULL )
{
IMENUCTL_Release(pMe->pMenu1);
pMe->pMenu1 = NULL;
}
// 追加:イベントフリー
IEVENTLIST_Release(pMe->pElist);
// 全体フリー
FREEIF(pMe);
// 親のエリアをクリア
poya->garea = NULL;
}
/*==================================*/
// 関数名:gamen1_DispAppData //
// 内容 :画面の初期表示 //
/*==================================*/
boolean gamen1_DispAppData(gamen1* pMe)
{
int curpos,buhinpos;
// 初期化
curpos = 0;
buhinpos = 0;
//==================================//
// リドローする //
//==================================//
// ここに、
// 1.リドローと、
// 2.次のフォーカス指示を書く
// テキストエリアのRedrawやUpdateする
if ( pMe->pMenu1 != NULL )
{
// リドロー
IMENUCTL_Redraw(pMe->pMenu1);
// カーソル番号pMe->curnoから、部品の番号(仕様書のA桁の
// No)に変換する。その番号をbuhinposだとすると
if(buhinpos == 0)
IMENUCTL_SetActive(pMe->pMenu1,TRUE);
else
IMENUCTL_SetActive(pMe->pMenu1,FALSE);
}
return TRUE;
}
|