임베디드 모바일 프로그래밍 1 11. idisplay api (2) 11.1 idisplay api 서비스 –...

43
임임임임 임임임 임임임임임 1 11. IDisplay API (2) 11.1 IDisplay API 임임임 – 임임임 임임 임임임 • IDISPLAY_DrawRect 임임 - 임임임 임임 임임임임 임임임임 임임임 임임임임 임임임 임임 - IDISPLAY_DrawRect 임임임 임임 함함 함함 Void IDISPLAY_DrawRect(Idisplay *pIDisplay, const AEERect *pRect, RGBVAL clrFrame, RGBVAL clrFill, uint32 dwFlags) 임임임 임임 임임임임 임임임임 임임임임 임임임 임임임임 임임임 임임 임임 임임 pIDisplay IDisplay 임임임임임 임임임 pRect 임임임임 임임임 임임임 임임임임 . clrFrame 임임임임 임임 임임임임 . clrFill 임임임임 임임 임임 임임임임 . dwFlags 임임임 임 , IDF_RECT_FRAME, IDF_RECT_FILL, IDF_RECT_INVERT 임임임 임임

Upload: amanda-west

Post on 16-Dec-2015

245 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 1

11. IDisplay API (2)

11.1 IDisplay API 서비스 – 간단한 도형 그리기

• IDISPLAY_DrawRect 함수

- 지정한 색과 플래그를 사용하여 주어진 사각형을 그리는 함수

- IDISPLAY_DrawRect 함수의 형식

함수 형식Void IDISPLAY_DrawRect(Idisplay *pIDisplay, const AEERect *pRect, RGBVAL clrFrame, RGBVAL clrFi

ll, uint32 dwFlags)

기 능 지정한 색과 플래그를 사용하여 여러가지 모양의 사각형을 그리는 함수

함수 인자

pIDisplay IDisplay 인터페이스 포인터

pRect 사각형이 표현될 좌표를 지정한다 .

clrFrame 프레임의 색을 지정한다 .

clrFill 사각형을 채울 색을 지정한다 .

dwFlags 플래그 값 , IDF_RECT_FRAME, IDF_RECT_FILL, IDF_RECT_INVERT

반환값 없음

Page 2: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 2

11. IDisplay API (2)

• IDisplay_FrameButton 함수

- 시스템 색 해상도에 따라 3D 프레임 단추를 그리는 함수

- IDisplay_FrameButton 함수의 형식

함수 형식

Void IDISPLAY_FrameButton(IDisplay * pIDisplay, AEERect * prc, boolean bPressed, RGBVAL clrFill)

기 능 버튼을 3D 프레임 효과를 줄 때 사용한다 .

함수 인자

pIDisplay IDisplay 인터페이스 포인터

prc 버튼을 표현할 좌표를 지정한다 .

pPressed버튼의 누름 상태를 지정한다 .-TRUE: 눌린 버튼- FALSE: 올라온 버튼

clrFill 채우기에 사용되는 색상 정보

반환값 없음

Page 3: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 3

11. IDisplay API (2)

• IDISPLAY_DrawFrame 함수

- 시스템의 색 해상도에 따라 복잡한 프레임을 그리는 함수

- IDISPLAY_DrawFrame 함수의 형식

함수 형식

Int IDISPLAY_DrawFrame(IDisplay * pIDisplay, AEERect * prc, AEEFrameType ft, RGBVAL clrFill)

기 능 프레임을 생성하기 위하여 사용하며 채우기 색상을 지정할 수 있다 .

함수 인자

pIDisplay IDisplay 인터페이스 포인터

prc 프레임을 나타낼 좌표를 지정한다 .

ft 프레임의 유형을 나타낸다 .

clrFill 채우기에 사용되는 색상 정보반환값 없음

Page 4: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 4

11. IDisplay API (2)

• IDISPLAY_DrawHLine 함수

- 수평선을 그린다 .

- IDISPLAY_DrawHLine 함수의 형식

함수 형식

Void IDISPLAY_DrawHLine(IDisplay * pIDisplay, int16 x, int16 y, int16 len)

기 능 수평선을 그린다 .

함수 인자

pIDisplay IDisplay 인터페이스 포인터

X 수평선이 시작될 X 좌표

Y 수평선이 시작될 Y 좌표

Len 수평선 길이

반환값 없 음

Page 5: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 5

11. IDisplay API (2)

• IDISPLAY_DrawVLine 함수

- 수직선을 그린다 .

- IDISPLAY_DrawVLine 함수의 형식

함수 형식

Void IDISPLAY_DrawVLine(IDisplay * pIDisplay, int16 x, int16 y, int16 len)

기 능 수직선을 그린다 .

함수 인자

pIDisplay IDisplay 인터페이스 포인터

X 수직선이 시작될 X 좌표

Y 수직선이 시작될 Y 좌표

Len 수직선 길이

반환값 없음

Page 6: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 6

11. IDisplay API (2)

11.2 IDisplay API – 도형 그리기 프로그램 (IdisplayEx2)

블록 다이어그램

IDisplay 예제 메뉴 EVT_KEY EVT_COMMAND

• DisplayFrameButton(pMe, TRUE);• pMe->m_nButton=1;• DisplayFrameButton(pMe, FALSE);

• pMe->m_nDrawRect=2;• pMe->m_nDrawRect+=1;• IDISPLAY_DrawRecct()• pMe->m_nDrawRect 가 5 일때 까지 반복

• DisplayOutput()

• pMe->m_nFrame=1;• Display_Output();• fType 설정 ;• IDISPLAY_DrawFrame();• IDISPLAY_Update();• pMe->m_nFrame 이 9 일때 까지 반복

• pMe->m_nDrawLine=1;• IDISPLAY_DrawHLine(); 과 IDISPLAY_DrawVLine(); 를 2 번 실행

MENU_EVT_BITBLT

MENU_EVT_FRAMEBUTTON

MENU_EVT_DRAWRECT

• ISHELL_LoadResData();• IDISPLAY_BitBlt();• IDISPLAY_Update()

MENU_EVT_DISPLAY

MENU_EVT_DRAWFRAME

MENU_EVT_DRAWLINE

Page 7: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 7

11. IDisplay API (2) 소스 프로그램

/*===============================================================================

INCLUDES AND VARIABLE DEFINITIONS

=============================================================================== */

#include "AEEModGen.h" // Module interface definitions

#include "AEEAppGen.h" // Applet interface definitions

#include "AEEShell.h" // Shell interface definitions

#include "AEEMenu.h"

#include "AEEStdLib.h"

#include "AEEDisp.h"

#include "IDisplayEx2.bid"

#include "IDisplayEx2_res.h"

#define MENU_EVT_DISPLAY 401

#define MENU_EVT_BITBLT 402

#define MENU_EVT_FRAMEBUTTON 403

#define MENU_EVT_DRAWRECT 404

#define MENU_EVT_DRAWFRAME 405

#define MENU_EVT_DRAWLINE 406

#define APP_RES_FILE "IDisplayEx2.bar"

Page 8: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 8

11. IDisplay API (2)typedef struct _CIDisplayEx2

{

AEEApplet a; // Mandatory first AEEApplet data member

IMenuCtl * m_pIMenu;

// Device parameters

int m_nLineHeight;

int m_nButton;

int m_nDrawRect;

int m_nFrame;

int m_nDrawLine;

AEEDeviceInfo m_dInfo;

} CIDisplayEx2;

/*-------------------------------------------------------------------

Function Prototypes

-------------------------------------------------------------------*/

// IShellExample 애플릿에서 발생하는 이벤트 처리 함수

static boolean IDisplayEx2_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam);

static boolean IDisplayEx2_InitAppData(IApplet* pMe);

static void IDisplayEx2_FreeAppData(IApplet* pMe);

static void DisplayOutput(IApplet * pMe, int nline, char *pszStr, RGBVAL clrColor);

static void DisplayMenu(CIDisplayEx2 *pMe);

static void DisplayFrameButton(CIDisplayEx2 *pMe, boolean buttonType);

Page 9: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 9

11. IDisplay API (2)int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po, void ** ppObj)

{

*ppObj = NULL;

if(ClsId == AEECLSID_IDISPLAYEX2){

if(AEEApplet_New(sizeof(CIDisplayEx2), ClsId, pIShell,po,(IApplet**)ppObj, (AEEHANDLER)IDisplayEx2_HandleEvent,(PFNFREEAPPDATA)IDisplayEx2_FreeAppData) == TRUE)

{

if (IDisplayEx2_InitAppData((IApplet*)*ppObj) == TRUE)

return(AEE_SUCCESS);

}

}

return (EFAILED);

}

static boolean IDisplayEx2_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)

{

CIDisplayEx2 * pMe = (CIDisplayEx2 *)pi;

AEERect rc;

AECHAR szBuf[50];

AEEMenuColors mclr;

SETAEERECT (&rc, 0, 0, pMe->m_dInfo.cxScreen, pMe->m_dInfo.cyScreen);

Page 10: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 10

11. IDisplay API (2)switch (eCode)

{

case EVT_APP_START:

// 알람 정보를 등록할 메뉴 컨트롤을 생성한다 .

if(ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_MENUCTL, (void **)&pMe->m_pIMenu) != SUCCESS)

{

return FALSE;

}

// 선택된 메뉴의 색상을 설정한다 mclr.wMask = MC_BACK|MC_TEXT|MC_SEL_BACK|MC_SEL_TEXT|MC_SCROLL

BAR|MC_SCROLLBAR_FILL|MC_FRAME;

mclr.cBack = RGB_WHITE;

mclr.cText = RGB_BLACK;

mclr.cSelBack = MAKE_RGB (146, 109, 255);

mclr.cSelBack = MAKE_RGB (124, 109, 197);

mclr.cSelText = RGB_BLACK;

mclr.cFrame = RGB_WHITE;

IMENUCTL_SetColors (pMe->m_pIMenu, &mclr);

STREXPAND((const unsigned char *)"IDisplay 예제 ", STRLEN("IDisplay 예제 "), szBuf, sizeof(szBuf));

IMENUCTL_SetTitle(pMe->m_pIMenu, NULL, 0, szBuf);

IMENUCTL_SetRect(pMe->m_pIMenu, &rc);

// Add CreateInstance to menu

Page 11: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 11

11. IDisplay API (2)STREXPAND((const unsigned char *)"1. 텍스트 처리 ", STRLEN("1. 텍스트 처리 "), s

zBuf, sizeof(szBuf));

IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, MENU_EVT_DISPLAY, szBuf, 0);

STREXPAND((const unsigned char *)"2. 비트맵 이미지 ", STRLEN("2. 비트맵 이미지 "), szBuf, sizeof(szBuf));

IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, MENU_EVT_BITBLT, szBuf, 0);

STREXPAND((const unsigned char *)"3. 사각형 그리기 ", STRLEN("4. 사각형 그리기 "), szBuf, sizeof(szBuf));

IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, MENU_EVT_DRAWRECT, szBuf, 0);

STREXPAND((const unsigned char *)"4. 버튼 생성하기 ", STRLEN("4. 버튼 생성하기 "), szBuf, sizeof(szBuf));

IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, MENU_EVT_FRAMEBUTTON, szBuf, 0);

STREXPAND((const unsigned char *)"5. 프레임 그리기 ", STRLEN("5. 프레임 그리기 "), szBuf, sizeof(szBuf));

IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, MENU_EVT_DRAWFRAME, szBuf, 0);

STREXPAND((const unsigned char *)"6. 선 그리기 ", STRLEN("6. 선 그리기 "), szBuf, sizeof(szBuf));

IMENUCTL_AddItem(pMe->m_pIMenu, 0, 0, MENU_EVT_DRAWLINE, szBuf, 0);

IMENUCTL_SetActive(pMe->m_pIMenu,TRUE);

return(TRUE);

// 애플릿이 종료될 때 발생하는 이벤트이다 .

case EVT_APP_STOP:

return(TRUE);

Page 12: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 12

11. IDisplay API (2)case EVT_KEY:

if (pMe->m_pIMenu){

if ((IMENUCTL_IsActive(pMe->m_pIMenu) == FALSE) && (wParam == AVK_RIGHT))

{pMe->m_nButton = 0;pMe->m_nFrame = 0;pMe->m_nDrawRect = 0;IMENUCTL_SetActive(pMe->m_pIMenu, TRUE);IMENUCTL_Redraw(pMe->m_pIMenu);

} return IMENUCTL_HandleEvent(pMe->m_pIMenu, EVT_KEY, wParam, 0);}else

return FALSE;case EVT_KEY_PRESS:

{if((pMe->m_nButton == 1) && (wParam == AVK_SELECT)){

DisplayFrameButton(pMe, FALSE);}if((pMe->m_nDrawRect >= 2) && (wParam == AVK_SELECT)){

AEERect rct = {0};RGBVAL clrFrame, clrFill;uint32 dwFlags;

키를 누를 경우 발생하는 이벤트

메뉴 화면이 아닌 두 번째 화면에서 오른쪽 방향키를 누르면 메뉴 화면으로 돌아간다 .

키 이벤트가 발생할 때 발생하는

이벤트이다 . 자세한 키

정보는 wParam에 전달

Page 13: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 13

11. IDisplay API (2)switch(pMe->m_nDrawRect)

{

case 2:

{

SETAEERECT (&rct, 5, pMe->m_nLineHeight*3 + 4, pMe->m_dInfo.cxScreen/2, pMe->m_nLineHeight);

clrFrame = MAKE_RGB (0, 0, 0); // Black color

clrFill = MAKE_RGB (0xff, 0xff, 0xff) ; // White color

// Draw only the outline of the rectangle (rectangle frame).

dwFlags = IDF_RECT_INVERT;

pMe->m_nDrawRect += 1;

IDISPLAY_DrawRect(pMe->a.m_pIDisplay, &rct, clrFrame, clrFill, dwFlags);

IDISPLAY_Update(pMe->a.m_pIDisplay);

break;

}

case 3:

{

SETAEERECT (&rct, 5, pMe->m_nLineHeight*4 + 6, pMe->m_dInfo.cxScreen/2, pMe->m_nLineHeight);

clrFrame = MAKE_RGB (0, 0xff, 0); // Green color

프레임 검정색의 흰색 사각형을

반전하여 그린다 .

Page 14: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 14

11. IDisplay API (2)clrFill = MAKE_RGB (0xff, 0,

0); // Red color

dwFlags = IDF_RECT_FILL;

pMe->m_nDrawRect += 1;

IDISPLAY_DrawRect(pMe->a.m_pIDisplay, &rct, clrFrame, clrFill, dwFlags);

IDISPLAY_Update(pMe->a.m_pIDisplay);

break;

}

case 4:

{

SETAEERECT (&rct, 5, pMe->m_nLineHeight*5 + 8, pMe->m_dInfo.cxScreen/2, pMe->m_nLineHeight);

clrFrame = MAKE_RGB (0, 0, 0xff); // Blue color

clrFill = MAKE_RGB (0, 0xff, 0); // Green color

dwFlags = IDF_RECT_FRAME | IDF_RECT_FILL;

pMe->m_nDrawRect += 1;

IDISPLAY_DrawRect(pMe->a.m_pIDisplay, &rct, clrFrame, clrFill, dwFlags);

IDISPLAY_Update(pMe->a.m_pIDisplay);

break;

}

Page 15: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 15

11. IDisplay API (2)case 5:

{

SETAEERECT (&rct, 5, pMe->m_nLineHeight*6 + 10, pMe->m_dInfo.cxScreen/2, pMe->m_nLineHeight);

clrFrame = MAKE_RGB (0, 0, 0xff); // Blue color

clrFill = MAKE_RGB (0, 0xff, 0); // Green color

dwFlags = IDF_RECT_FRAME;

pMe->m_nDrawRect += 1;

IDISPLAY_DrawRect(pMe->a.m_pIDisplay, &rct, clrFrame, clrFill, dwFlags);

IDISPLAY_Update(pMe->a.m_pIDisplay);

break;

}

default:

break;

}

}

if((pMe->m_nFrame >= 1) && (wParam == AVK_SELECT))

{

AEERect rct;

AEEFrameType fType;

RGBVAL clrFill;

프레임 유형

Page 16: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 16

11. IDisplay API (2)if(pMe->m_nFrame >=6){

SETAEERECT (&rct, 5, pMe->m_nLineHeight*(2*(pMe->m_nFrame-5)+1), pMe->m_dInfo.cxScreen/2, pMe->m_nLineHeight);

clrFill = MAKE_RGB (0, 0xff, 0);}else{

SETAEERECT (&rct, 5, pMe->m_nLineHeight*(2*pMe->m_nFrame+1), pMe->m_dInfo.cxScreen/2, pMe->m_nLineHeight);

clrFill = MAKE_RGB (0, 0, 0xff);}switch(pMe->m_nFrame){

case 1:case 6:

if(pMe->m_nFrame == 1){

DisplayOutput((IApplet *)pMe, 2*pMe->m_nFrame, "AEE_FT_3D_EMPTY", MAKE_RGB(0,0,0));

fType = AEE_FT_3D_EMPTY;

}else{

DisplayOutput((IApplet *)pMe, (pMe->m_nFrame-5)*2, "AEE..BOTTOM_SEL", MAKE_RGB(0,0,0));

fType = AEE_FT_TAB_BOTTOM_SEL;

}

Page 17: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 17

11. IDisplay API (2)IDISPLAY_DrawFrame (pMe

->a.m_pIDisplay, &rct, fType, clrFill);

IDISPLAY_Update(pMe->a.m_pIDisplay);

pMe->m_nFrame += 1;

break;

case 2:

case 7:

if(pMe->m_nFrame == 2)

{

DisplayOutput((IApplet *)pMe, pMe->m_nFrame*2, "AEE_FT_RAISED", MAKE_RGB(0,0,0));

fType = AEE_FT_RAISED;

}

else

{

DisplayOutput((IApplet *)pMe, (pMe->m_nFrame-5)*2, "AEE..TAB_BOTTOM", MAKE_RGB(0,0,0));

fType = AEE_FT_TAB_BOTTOM;

}

IDISPLAY_DrawFrame (pMe->a.m_pIDisplay, &rct, fType, clrFill);

IDISPLAY_Update(pMe->a.m_pIDisplay);

pMe->m_nFrame += 1;

break;

Page 18: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 18

11. IDisplay API (2)case 3:case 8:

if(pMe->m_nFrame == 3){

DisplayOutput((IApplet *)pMe, pMe->m_nFrame*2, "AEE_FT_LOWERED", MAKE_RGB(0,0,0));

fType = AEE_FT_LOWERED;

}else{

DisplayOutput((IApplet *)pMe, (pMe->m_nFrame-5)*2, "AEE_FT_TAB_TOP", MAKE_RGB(0,0,0));

fType = AEE_FT_TAB_TOP;

}IDISPLAY_DrawFrame (pMe

->a.m_pIDisplay, &rct, fType, clrFill);IDISPLAY_Update(pMe->a.m

_pIDisplay);pMe->m_nFrame += 1;break;

case 4:case 9:

if(pMe->m_nFrame == 4){

DisplayOutput((IApplet *)pMe, pMe->m_nFrame*2, "AEE_FT_BOX", MAKE_RGB(0,0,0));

fType = AEE_FT_BOX;

}

Page 19: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 19

11. IDisplay API (2)else{

DisplayOutput((IApplet *)pMe, (pMe->m_nFrame-5)*2, "AEE_FT_TAB_TOP_SEL", MAKE_RGB(0,0,0));

fType = AEE_FT_TAB_TOP_SEL;

IDISPLAY_EraseRgn (pMe->a.m_pIDisplay, 0, pMe->m_nLineHeight*10,

pMe->m_dInfo.cxScreen, pMe->m_dInfo.cyScreen);

}IDISPLAY_DrawFrame (pMe

->a.m_pIDisplay, &rct, fType, clrFill);IDISPLAY_Update(pMe->a.m

_pIDisplay);pMe->m_nFrame += 1;break;

case 5:DisplayOutput((IApplet *)pMe,

pMe->m_nFrame*2, "AEE_FT_INDENT", MAKE_RGB(0,0,0));fType = AEE_FT_INDENT;IDISPLAY_DrawFrame (pMe

->a.m_pIDisplay, &rct, fType, clrFill);IDISPLAY_Update(pMe->a.m

_pIDisplay);pMe->m_nFrame += 1;break;

default:break;

}}

Page 20: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 20

11. IDisplay API (2)if((pMe->m_nDrawLine >= 1) && (wParam == AVK_SELECT)){

int16 startX = 10;int16 startY = pMe->m_dInfo.cyScreen/4;int16 len = pMe->m_dInfo.cxScreen/2;switch(pMe->m_nDrawLine){

case 1:IDISPLAY_DrawHLine(pMe

->a.m_pIDisplay, startX, startY, len);break;

case 2:IDISPLAY_DrawVLine(pMe

->a.m_pIDisplay, startX, startY, len);break;

case 3:IDISPLAY_DrawHLine(pMe

->a.m_pIDisplay, startX, startY+len, len);break;

case 4:IDISPLAY_DrawVLine(pMe

->a.m_pIDisplay, startX + len, startY, len);break;

default:break;

}pMe->m_nDrawLine += 1;IDISPLAY_Update(pMe->a.m_pIDisplay);//DisplayFrameButton(pMe, FALSE);

}return TRUE;

}

Page 21: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 21

11. IDisplay API (2)case EVT_KEY_RELEASE:

{if((pMe->m_nButton == 1) && (wParam == AVK_SELECT)){

DisplayFrameButton(pMe, TRUE);}

return TRUE;

}case EVT_COMMAND:

switch(wParam) {

case MENU_EVT_DISPLAY:{

IDISPLAY_ClearScreen (pMe->a.m_pIDisplay);IMENUCTL_SetProperties(pMe->m_pIMenu, MP_NO_RE

DRAW);IMENUCTL_SetActive(pMe->m_pIMenu, FALSE);DisplayOutput((IApplet *)pMe, 1, " 낙엽들을 보며 ", MAK

E_RGB(0x66,0x33,0));DisplayOutput((IApplet *)pMe, 4, " 헤아릴 수 없는 ", MAK

E_RGB(0x66,0xff,0));DisplayOutput((IApplet *)pMe, 6, " 사연을 간직한 ", MAK

E_RGB(0x66,0x66,0));DisplayOutput((IApplet *)pMe, 8, " 시간의 파편들이여 !",

MAKE_RGB(0x99,0x33,0x33));return TRUE;

}

Page 22: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 22

11. IDisplay API (2)case MENU_EVT_BITBLT:

{

AEEBmp pbmSource;

int xDest = 0;

int yDest = 10;

int cxDest = pMe->m_dInfo.cxScreen;

int cyDest = pMe->m_dInfo.cyScreen;

int xSrc = 0;

int ySrc = 0;

AEERasterOp dwRopCode = AEE_RO_MASK;

AEEImageInfo imageInfo;

void *pBmp = NULL, *pDataBytes = NULL;

boolean bVal = TRUE;

IDISPLAY_ClearScreen (pMe->a.m_pIDisplay);

IMENUCTL_SetProperties(pMe->m_pIMenu, MP_NO_REDRAW);

IMENUCTL_SetActive(pMe->m_pIMenu, FALSE);

pbmSource = ISHELL_LoadResData (pMe->a.m_pIShell, APP_RES_FILE,

IDB_BITMAP_CU, RESTYPE_IMAGE);

pDataBytes = (byte *)pbmSource + *((byte *)pbmSource);

pBmp = CONVERTBMP (pDataBytes, &imageInfo, &bVal);

Page 23: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 23

11. IDisplay API (2)IDISPLAY_BitBlt (pMe->a.m_pIDisplay, xDest, yDest, cxD

est, cyDest, pBmp,

xSrc, ySrc, dwRopCode);

IDISPLAY_Update (pMe->a.m_pIDisplay);

ISHELL_FreeResData (pMe->a.m_pIShell, pbmSource);

if(bVal)//free only if realloc was done

SYSFREE ( pBmp);

return TRUE;

}

case MENU_EVT_FRAMEBUTTON:

{

IDISPLAY_ClearScreen (pMe->a.m_pIDisplay);

IMENUCTL_SetProperties(pMe->m_pIMenu, MP_NO_REDRAW);

IMENUCTL_SetActive(pMe->m_pIMenu, FALSE);

DisplayOutput((IApplet *)pMe, 1, " 선택 버튼 클릭 ~~", MAKE_RGB(0,0,0));

DisplayOutput((IApplet *)pMe, 8, " 이전 메뉴는 오른쪽 키를 선택하세요 .", MAKE_RGB(0,0,0));

DisplayFrameButton(pMe, TRUE);

pMe->m_nButton = 1;

return TRUE;

}

Page 24: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 24

11. IDisplay API (2)case MENU_EVT_DRAWRECT:

{

IDISPLAY_ClearScreen (pMe->a.m_pIDisplay);

IMENUCTL_SetProperties(pMe->m_pIMenu, MP_NO_REDRAW);

IMENUCTL_SetActive(pMe->m_pIMenu, FALSE);

DisplayOutput((IApplet *)pMe, 1, "DrawRect 함수 ", MAKE_RGB(0,0,0));

pMe->m_nDrawRect = 2;

return TRUE;

}

case MENU_EVT_DRAWFRAME:

{

IDISPLAY_ClearScreen (pMe->a.m_pIDisplay);

IMENUCTL_SetProperties(pMe->m_pIMenu, MP_NO_REDRAW);

IMENUCTL_SetActive(pMe->m_pIMenu, FALSE);

DisplayOutput((IApplet *)pMe, 1, "DrawFrame 함수 ", MAKE_RGB(0,0,0));

IDISPLAY_Update(pMe->a.m_pIDisplay);

pMe->m_nFrame = 1;

return TRUE;

}

사각형 그리기 화면

Page 25: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 25

11. IDisplay API (2)case MENU_EVT_DRAWLINE:

{

IDISPLAY_ClearScreen (pMe->a.m_pIDisplay);

IMENUCTL_SetProperties(pMe->m_pIMenu, MP_NO_REDRAW);

IMENUCTL_SetActive(pMe->m_pIMenu, FALSE);

DisplayOutput((IApplet *)pMe, 1, " 선 그리기 함수 ", MAKE_RGB(0,0,0));

IDISPLAY_Update(pMe->a.m_pIDisplay);

pMe->m_nDrawLine = 1;

return TRUE;

}

default:

return FALSE;

}

default:

break;

}

return FALSE;

}

Page 26: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 26

11. IDisplay API (2)static boolean IDisplayEx2_InitAppData(IApplet* pi){

CIDisplayEx2* pMe = (CIDisplayEx2*)pi;int pnAscent = 0;int pnDescent = 0;// Initialize the MenuCtl pointer to NULLpMe->m_pIMenu = NULL;pMe->m_nButton = 0;pMe->m_nFrame = 0;pMe->m_nDrawLine = 0;pMe->m_nDrawRect = 0;

pMe->m_nLineHeight = IDISPLAY_GetFontMetrics (pMe->a.m_pIDisplay, AEE_FONT_NORMAL, &pnAscent, &pnDescent);

ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->m_dInfo);return TRUE;

}

static void IDisplayEx2_FreeAppData(IApplet* pi){

CIDisplayEx2* pMe = (CIDisplayEx2*)pi;// 메뉴 컨트롤이 해지가 되지 않았다면 해지한다 .if (pMe->m_pIMenu != NULL){

// 메뉴 컨트롤 해지하는 함수IMENUCTL_Release (pMe->m_pIMenu);pMe->m_pIMenu = NULL;

}}

Page 27: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 27

11. IDisplay API (2)static void DisplayFrameButton(CIDisplayEx2 *pMe, boolean buttonType)

{

AEERect rct;

AEEFrameType fType;

RGBVAL clrFill;

SETAEERECT (&rct, pMe->m_dInfo.cxScreen/4, pMe->m_nLineHeight*3, pMe->m_dInfo.cxScreen/3, pMe->m_nLineHeight*3/2);

fType = AEE_FT_EMPTY;

clrFill = MAKE_RGB (0, 0, 0xff);

IDISPLAY_FrameButton (pMe->a.m_pIDisplay, &rct, buttonType, clrFill);

IDISPLAY_Update (pMe->a.m_pIDisplay);

}

static void DisplayOutput(IApplet * pi, int nline, char *pszStr, RGBVAL clrColor)

{

AEEDeviceInfo di; // Device Info

AECHAR szBuf[200] = {0}; // a buffer that supports 200 char string

AECHAR * psz = NULL;

int pixelWidth;

AEEFont font = AEE_FONT_NORMAL;

int pnFits = 0, dy;

int totalCh = 0;

int charHeight = 0; // Stores the char height in pixels for given font

int pnAscent = 0; // Stores the ascent in number of pixels

int pnDescent = 0; // Stores the descent in number of pixels

AEERect rc;

Page 28: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 28

11. IDisplay API (2) AEEApplet * pMe = (AEEApplet*)pi;

if (pMe == NULL)

return;

// Get device information

ISHELL_GetDeviceInfo(pMe->m_pIShell,&di);

// Get the font metrics info

charHeight = IDISPLAY_GetFontMetrics (pMe->m_pIDisplay, AEE_FONT_NORMAL,

&pnAscent, &pnDescent);

// Convert to wide string (unicode)

STREXPAND((const unsigned char *) pszStr, STRLEN(pszStr), szBuf, sizeof(szBuf));

if (nline < 0) {

dy = di.cyScreen*2/5;

}

else{

dy = nline * charHeight;

}

psz = szBuf;

totalCh = STRLEN ((char *)pszStr);

Page 29: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 29

11. IDisplay API (2) while ((totalCh > 0) && (*psz != NULL)) { pixelWidth = IDISPLAY_MeasureTextEx(pMe->m_pIDisplay, font, (AECHAR *) psz, // Start of the buffer to display, -1, di.cxScreen - 5, // maxWidth &pnFits); // Number of chars that will fit a line

if (pnFits == 0) return; SETAEERECT(&rc, 0, dy, di.cxScreen, charHeight);

IDISPLAY_EraseRect(pMe->m_pIDisplay, &rc); IDISPLAY_SetColor(pMe->m_pIDisplay,CLR_USER_TEXT,clrColor);

IDISPLAY_DrawText(pMe->m_pIDisplay, AEE_FONT_NORMAL, psz, pnFits, 5 /*start dx*/, dy, 0 /* use default rectangle coordinates */, 0);

psz += pnFits; // move pointer to the next segment to be displayed totalCh -= pnFits; // reduce the total number of characters to still display dy += charHeight; // Place next line charHeight pixels below the // previous line. IDISPLAY_Update(pMe->m_pIDisplay); if (totalCh < pnFits) pnFits = totalCh; // if total number is less than pnFits, adjust pnFits } return; }

Page 30: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 30

11. IDisplay API (2)

11.3 실행 결과

Page 31: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 31

11. IDisplay API (2)

Page 32: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 32

11. IDisplay API (2)

11.4 박테리아 프로그램 bacteria.h

#include "AEEModGen.h" #include "AEEAppGen.h" #include "AEEShell.h" #include "AEEGraphics.h"#include "AEEStdLib.h"#include "bacteria.bid"

#define STARTX 15#define STARTY 10#define BLOCKSIZE 10

#define NONE 100#define RED 101#define BLUE 102

#define REDMAN 200#define BLUEMAN 201

#define LEFT 300#define RIGHT 301#define UP 302#define DOWN 303

typedef struct _bacteria {AEEApplet a ;

AEEDeviceInfo DeviceInfo; IDisplay *pIDisplay; IShell *pIShell;

Page 33: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 33

11. IDisplay API (2)

IGraphics *graphic;

int bgArry[10][10];

AEECircle block;

AEERect pointer;

int gameState;int gameOrder;int direction;

RGBVAL nowColor;int indexX , indexY;

} bacteria;

static boolean bacteria_HandleEvent(bacteria* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam);boolean bacteria_InitAppData(bacteria* pMe);void bacteria_FreeAppData(bacteria* pMe);

void drawBG(bacteria *pMe);void startGame(bacteria *pMe);void selectBlock(bacteria *pMe);void move(bacteria *pMe);void checkLine(bacteria *pMe);

Page 34: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 34

11. IDisplay API (2)

bacteria.c

#include "bacteria.h"

int AEEClsCreateInstance(AEECLSID ClsId, IShell *pIShell, IModule *po, void **ppObj){

*ppObj = NULL;

if( ClsId == AEECLSID_BACTERIA ){

if( AEEApplet_New(sizeof(bacteria), ClsId, pIShell, po, (IApplet**)ppObj, (AEEHANDLER)bacteria_HandleEvent, (PFNFREEAPPDATA)bacteria_FreeAppData))

{if(bacteria_InitAppData((bacteria*)*ppObj)){

return(AEE_SUCCESS);}else{

IAPPLET_Release((IApplet*)*ppObj);return EFAILED;

}

}

}

return(EFAILED);}

static boolean bacteria_HandleEvent(bacteria* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam){

switch (eCode) {

Page 35: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 35

11. IDisplay API (2)case EVT_APP_START:

if(pMe->gameState == 0){

pMe->gameState=1;drawBG(pMe);

} return(TRUE); case EVT_APP_STOP: return(TRUE); case EVT_APP_SUSPEND: return(TRUE); case EVT_APP_RESUME: return(TRUE); case EVT_APP_MESSAGE: return(TRUE); case EVT_KEY:

switch(wParam){case AVK_SELECT:

if(pMe->gameState == 1) {pMe->gameState = 2;startGame(pMe);

}else if(pMe->gameState == 2 && pMe->bgArry[pMe->indexY][pMe->inde

xX]== NONE){selectBlock(pMe);

}break;

case AVK_LEFT:if(pMe->indexX > 0 && pMe->gameState==2){

SETAEERECT(&pMe->pointer , STARTX+pMe->indexX*10+3 , STARTY+pMe->indexY*10+3 , BLOCKSIZE-6 , BLOCKSIZE-6);

IDISPLAY_DrawRect(pMe->pIDisplay , &pMe->pointer , MAKE_RGB(255,255,255) , MAKE_RGB(255,255,255) , IDF_RECT_FRAME|IDF_RECT_FILL);

pMe->indexX--;move(pMe);IDISPLAY_Update(pMe->pIDisplay);

}break;

Page 36: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 36

11. IDisplay API (2)case AVK_RIGHT:

if(pMe->indexX < 9 && pMe->gameState==2){

SETAEERECT(&pMe->pointer , STARTX+pMe->indexX*10+3 , STARTY+pMe->indexY*10+3 , BLOCKSIZE-6 , BLOCKSIZE-6);

IDISPLAY_DrawRect(pMe->pIDisplay , &pMe->pointer , MAKE_RGB(255,255,255) , MAKE_RGB(255,255,255) , IDF_RECT_FRAME|IDF_RECT_FILL);

pMe->indexX++;move(pMe);IDISPLAY_Update(pMe->pIDisplay);

}break;

case AVK_UP:if(pMe->indexY > 0 && pMe->gameState==2){

SETAEERECT(&pMe->pointer , STARTX+pMe->indexX*10+3 , STARTY+pMe->indexY*10+3 , BLOCKSIZE-6 , BLOCKSIZE-6);

IDISPLAY_DrawRect(pMe->pIDisplay , &pMe->pointer , MAKE_RGB(255,255,255) , MAKE_RGB(255,255,255) , IDF_RECT_FRAME|IDF_RECT_FILL);

pMe->indexY--;move(pMe);IDISPLAY_Update(pMe->pIDisplay);

}break;

case AVK_DOWN:if(pMe->indexY < 9 && pMe->gameState==2){

SETAEERECT(&pMe->pointer , STARTX+pMe->indexX*10+3 , STARTY+pMe->indexY*10+3 , BLOCKSIZE-6 , BLOCKSIZE-6);

IDISPLAY_DrawRect(pMe->pIDisplay , &pMe->pointer , MAKE_RGB(255,255,255) , MAKE_RGB(255,255,255) , IDF_RECT_FRAME|IDF_RECT_FILL);

pMe->indexY++;move(pMe);IDISPLAY_Update(pMe->pIDisplay);

}break;

} return(TRUE); default: break; } return FALSE;}

Page 37: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 37

11. IDisplay API (2)boolean bacteria_InitAppData(bacteria* pMe){ pMe->DeviceInfo.wStructSize = sizeof(pMe->DeviceInfo); ISHELL_GetDeviceInfo(pMe->a.m_pIShell,&pMe->DeviceInfo); pMe->pIDisplay = pMe->a.m_pIDisplay; pMe->pIShell = pMe->a.m_pIShell; return TRUE;}

void bacteria_FreeAppData(bacteria* pMe){}

void drawBG(bacteria *pMe){

int i , j;AEERect bgRect;for(i=0 ; i < 10 ; i++){

for(j=0 ; j < 10 ; j++){

SETAEERECT(&bgRect , STARTX + i*BLOCKSIZE , STARTY + j*BLOCKSIZE , BLOCKSIZE , BLOCKSIZE);

IDISPLAY_DrawRect(pMe->pIDisplay , &bgRect , MAKE_RGB(0,0,0) , MAKE_RGB(255,255,255) , IDF_RECT_FRAME );

}}IDISPLAY_Update(pMe->pIDisplay);

}

void startGame(bacteria *pMe){

int i,j;ISHELL_CreateInstance(pMe->pIShell , AEECLSID_GRAPHICS , (void**)&pMe->graphic);pMe->gameOrder = REDMAN;for(i=0 ; i<10 ; i++){

for(j=0 ; j<10; j++){

pMe->bgArry[i][j] = NONE;}

}

Page 38: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 38

11. IDisplay API (2)pMe->indexX = 0;pMe->indexY = 0;pMe->nowColor = MAKE_RGB(255,0,0);SETAEERECT(&pMe->pointer , STARTX+3 , STARTY+3 , BLOCKSIZE-6 , BLOCKSIZE-6);IDISPLAY_DrawRect(pMe->pIDisplay , &pMe->pointer , pMe->nowColor, pMe->nowColor , IDF_RECT_FRAME|ID

F_RECT_FILL);IDISPLAY_Update(pMe->pIDisplay);

}void selectBlock(bacteria *pMe){

if(pMe->gameOrder == REDMAN) {

pMe->gameOrder = BLUEMAN;pMe->bgArry[pMe->indexY][pMe->indexX] = RED;pMe->nowColor = MAKE_RGB(0,0,255);checkLine(pMe);move(pMe);IDISPLAY_Update(pMe->pIDisplay);

}else if(pMe->gameOrder == BLUEMAN){

pMe->gameOrder = REDMAN;pMe->bgArry[pMe->indexY][pMe->indexX] = BLUE;pMe->nowColor = MAKE_RGB(255,0,0);checkLine(pMe);move(pMe);IDISPLAY_Update(pMe->pIDisplay);

}

}

void move(bacteria *pMe){

int i,j;

for(i=0 ; i<10 ; i++){

for(j=0 ; j<10 ; j++){

Page 39: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 39

pMe->block.cx = STARTX+j*10+BLOCKSIZE/2;pMe->block.cy = STARTY+i*10+BLOCKSIZE/2;pMe->block.r = BLOCKSIZE/2;switch(pMe->bgArry[i][j]){

case NONE:break;

case RED:IGRAPHICS_SetFillMode(pMe->graphic, TRUE);IGRAPHICS_SetFillColor(pMe->graphic, 255,0,0,0);IGRAPHICS_DrawCircle(pMe->graphic, &pMe->block);break;

case BLUE:IGRAPHICS_SetFillMode(pMe->graphic, TRUE);IGRAPHICS_SetFillColor(pMe->graphic, 0,0,255,0);IGRAPHICS_DrawCircle(pMe->graphic, &pMe->block);break;

}}

}SETAEERECT(&pMe->pointer , STARTX+pMe->indexX*10+3 , STARTY+pMe->indexY*10+3 , BLOCKSIZE-6 , B

LOCKSIZE-6);IDISPLAY_DrawRect(pMe->pIDisplay , &pMe->pointer , pMe->nowColor , pMe->nowColor , IDF_RECT_FRAME|ID

F_RECT_FILL);}

void checkLine(bacteria *pMe){

int i,j , x,y;int tempX , tempY , NoneCount=0;tempX = pMe->indexX;tempY = pMe->indexY;

11. IDisplay API (2)

Page 40: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 40

for(i = tempX ; i < 9 ; i++){

if(pMe->bgArry[tempY][i+1]==NONE) break;else if(pMe->bgArry[tempY][i+1] == pMe->bgArry[pMe->indexY][pMe->indexX]){

for(j=tempX ; j<=i ; j++){

pMe->bgArry[tempY][j] = pMe->bgArry[pMe->indexY][pMe->indexX];}break;

}}

for(i = tempX ; i >= 0 ; i--){

if(pMe->bgArry[tempY][i-1]==NONE) break;else if(pMe->bgArry[tempY][i-1] == pMe->bgArry[pMe->indexY][pMe->indexX]){

for(j=tempX ; j>=i ; j--){

pMe->bgArry[tempY][j] = pMe->bgArry[pMe->indexY][pMe->indexX];}break;

}}

for(i = tempY ; i < 9 ; i++){

if(pMe->bgArry[i+1][tempX]==NONE) break;else if(pMe->bgArry[i+1][tempX] == pMe->bgArry[pMe->indexY][pMe->indexX]){

for(j=tempY ; j<=i ; j++){

pMe->bgArry[j][tempX] = pMe->bgArry[pMe->indexY][pMe->indexX];}break;

}}

11. IDisplay API (2)

Page 41: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 41

for(i = tempY ; i >= 0 ; i--){

if(pMe->bgArry[i-1][tempX]==NONE) break;else if(pMe->bgArry[i-1][tempX] == pMe->bgArry[pMe->indexY][pMe->indexX]){

for(j=tempY ; j>=i ; j--){

pMe->bgArry[j][tempX] = pMe->bgArry[pMe->indexY][pMe->indexX];}break;

}}

for(i = tempX , j = tempY; i<9 && j<9; i++ , j++){

if(pMe->bgArry[j+1][i+1]==NONE) break;else if(pMe->bgArry[j+1][i+1] == pMe->bgArry[pMe->indexY][pMe->indexX]){

for(x=tempX , y=tempY ; x<=i && y<=j ; x++,y++){

pMe->bgArry[y][x] = pMe->bgArry[pMe->indexY][pMe->indexX];}break;

}}

for(i = tempX , j = tempY; i<9 && j>=0; i++ , j--){

if(pMe->bgArry[j-1][i+1]==NONE) break;else if(pMe->bgArry[j-1][i+1] == pMe->bgArry[pMe->indexY][pMe->indexX]){

for(x=tempX , y=tempY ; x<=i && y>=j ; x++,y--){

pMe->bgArry[y][x] = pMe->bgArry[pMe->indexY][pMe->indexX];}break;

}}

11. IDisplay API (2)

Page 42: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 42

for(i = tempX , j = tempY; i>=0 && j>=0; i-- , j--){

if(pMe->bgArry[j-1][i-1]==NONE) break;else if(pMe->bgArry[j-1][i-1] == pMe->bgArry[pMe->indexY][pMe->indexX]){

for(x=tempX , y=tempY ; x>=i && y>=j ; x--,y--){

pMe->bgArry[y][x] = pMe->bgArry[pMe->indexY][pMe->indexX];}break;

}}

for(i = tempX , j = tempY; i>=0 && j<9; i-- , j++){

if(pMe->bgArry[j+1][i-1]==NONE) break;else if(pMe->bgArry[j+1][i-1] == pMe->bgArry[pMe->indexY][pMe->indexX]){

for(x=tempX , y=tempY ; x>=i && y<=j ; x--,y++){

pMe->bgArry[y][x] = pMe->bgArry[pMe->indexY][pMe->indexX];}break;

}}

}

11. IDisplay API (2)

Page 43: 임베디드 모바일 프로그래밍 1 11. IDisplay API (2) 11.1 IDisplay API 서비스 – 간단한 도형 그리기 IDISPLAY_DrawRect 함수 - 지정한 색과 플래그를 사용하여

임베디드 모바일 프로그래밍 43

11. IDisplay API (2)

14.5 박테리아 프로그램 실행 결과