// IImage 인터페이스 예제
#include "AEEModGen.h"
#include "AEEAppGen.h"
#include "AEEShell.h" // 쉘 함수 관련
#include "AEEStdLib.h" // 문자열 관련
#include "ImageApp.bid" // BID 파일 참조
#include "ImageApp_res.h" // 리소스 파일 참조
typedef struct _tagImageApp
{
AEEApplet m_oApplet;
IImage* m_pImage; // IImage 인터페이스
}ImageAPP;
// 응용 프로그램 이벤트 핸들러 함수
static boolean ImageApp_HandleEvent( IApplet* pi, AEEEvent eCode,
uint16 wParam, uint32 dwParam )
{
ImageAPP* pMe = (ImageAPP*)pi;
AEEDeviceInfo di;
AECHAR wszBuf[50];
AEERect oRect; // 좌표 설정 변수
switch( eCode )
{
case EVT_APP_START:
ISHELL_GetDeviceInfo( pMe->m_oApplet.m_pIShell, &di );
IDISPLAY_ClearScreen( pMe->m_oApplet.m_pIDisplay );
// 화면에 안내 문구 표시
SETAEERECT( &oRect, 0, 0, di.cxScreen, 20 );
STR_TO_WSTR( "Press 1 To Draw", wszBuf, sizeof(wszBuf) );
IDISPLAY_DrawText( pMe->m_oApplet.m_pIDisplay, AEE_FONT_BOLD, wszBuf,
-1, 0, 0, &oRect, IDF_ALIGN_LEFT | IDF_ALIGN_MIDDLE );
SETAEERECT( &oRect, 0, 20, di.cxScreen, 20 );
STR_TO_WSTR( "Press 2 To Start", wszBuf, sizeof(wszBuf) );
IDISPLAY_DrawText( pMe->m_oApplet.m_pIDisplay, AEE_FONT_BOLD, wszBuf,
-1, 0, 0, &oRect, IDF_ALIGN_LEFT | IDF_ALIGN_MIDDLE );
SETAEERECT( &oRect, 0, 40, di.cxScreen, 20 );
STR_TO_WSTR( "Press 3 To Stop", wszBuf, sizeof(wszBuf) );
IDISPLAY_DrawText( pMe->m_oApplet.m_pIDisplay, AEE_FONT_BOLD, wszBuf,
-1, 0, 0, &oRect, IDF_ALIGN_LEFT | IDF_ALIGN_MIDDLE );
SETAEERECT( &oRect, 0, 60, di.cxScreen, 20 );
STR_TO_WSTR( "Press 4 To Exit", wszBuf, sizeof(wszBuf) );
IDISPLAY_DrawText( pMe->m_oApplet.m_pIDisplay, AEE_FONT_BOLD, wszBuf,
-1, 0, 0, &oRect, IDF_ALIGN_LEFT | IDF_ALIGN_MIDDLE );
IDISPLAY_Update( pMe->m_oApplet.m_pIDisplay );
pMe->m_pImage = NULL; // 인터페이스 초기화
return TRUE;
case EVT_APP_STOP:
if( pMe->m_pImage != NULL )
IIMAGE_Release( pMe->m_pImage ); // 인스턴스 소멸
pMe->m_pImage = NULL;
return TRUE;
// 키 이벤트
case EVT_KEY:
// 단말기 정보 읽기
ISHELL_GetDeviceInfo( pMe->m_oApplet.m_pIShell, &di );
// 화면을 지울 영역 설정
SETAEERECT( &oRect, 0, 80, di.cxScreen, di.cyScreen - 80 );
// 화면 지우기
IDISPLAY_EraseRect( pMe->m_oApplet.m_pIDisplay, &oRect );
switch( wParam )
{
// 키패드 1 : IIMAGE_Draw() 함수 테스트
case AVK_1:
// 기존의 인스턴스 소멸
if( pMe->m_pImage != NULL )
IIMAGE_Release( pMe->m_pImage );
// 리소스 파일에서 이미지 읽기
pMe->m_pImage = ISHELL_LoadResImage( pMe->m_oApplet.m_pIShell,
IMAGEAPP_RES_FILE, IDB_MSN );
// 이미지 읽기 실패시
if( pMe->m_pImage == NULL )
break;
// 이미지 그리기
IIMAGE_Draw( pMe->m_pImage, 0, 80 );
// IImage 인터페이스의 인스턴스 소멸
IIMAGE_Release( pMe->m_pImage );
// IImage 인터페이스 초기화
pMe->m_pImage = NULL;
break;
// 키패드 2 : IIMAGE_Start() 함수 테스트
case AVK_2:
// 기존의 인스턴스 소멸
if( pMe->m_pImage != NULL )
IIMAGE_Release( pMe->m_pImage );
// 리소스 파일에서 이미지 읽기
pMe->m_pImage = ISHELL_LoadResImage( pMe->m_oApplet.m_pIShell,
IMAGEAPP_RES_FILE, IDB_MSN );
// 이미지 읽기 실패시
if( pMe->m_pImage == NULL )
break;
// 애니메이션 이미지의 프레임 수 지정
IIMAGE_SetParm( pMe->m_pImage, IPARM_NFRAMES, 3, 0);
// 이미지 애니메이션 시작
IIMAGE_Start( pMe->m_pImage, 0, 80 );
break;
// 키패드 3 : IIMAGE_Stop() 함수 테스트
case AVK_3:
// IImage 인스턴스의 생성 여부를 확인후 애니메이션 중지
if( pMe->m_pImage != NULL )
IIMAGE_Stop( pMe->m_pImage );
break;
// 키패드 4 : 애플릿 종료
case AVK_4:
ISHELL_CloseApplet( pMe->m_oApplet.m_pIShell, FALSE );
break;
}
// 화면 갱신
IDISPLAY_Update( pMe->m_oApplet.m_pIDisplay );
return TRUE;
default:
break;
}
return FALSE;
}
// 응용 프로그램 시작 함수
int AEEClsCreateInstance( AEECLSID ClsId, IShell * pIShell,
IModule* po, void** ppObj )
{
*ppObj = NULL;
if( ClsId == AEECLSID_IMAGEAPP )
{
if( AEEApplet_New( sizeof(ImageAPP), ClsId, pIShell, po,
(IApplet**)ppObj,
(AEEHANDLER)ImageApp_HandleEvent, // 이벤트 처리
(PFNFREEAPPDATA)NULL )
== TRUE )
{
return AEE_SUCCESS;
}
}
return EFAILED;
}