170 likes | 325 Views
10. IControl API. IControl 인터페이스는 BREW 에서 표준으로 이용될 수 있는 기본적인 사용자 인터페이스와 키처리 부분을 제공한다 . IControl 인터페이스의 종류. 10. IControl API. 10.1 IControl API 관련 자료형 AEETextInputMode : 텍스트 컨트롤에 텍스트를 입력하는 데 사용할 수 있는 텍스트 입력 모드를 지정한다 .
E N D
10. IControl API • IControl 인터페이스는 BREW에서 표준으로 이용될 수 있는 기본적인 사용자 인터페이스와 키처리 부분을 제공한다. • IControl 인터페이스의 종류 임베디드 모바일 프로그래밍
10. IControl API • 10.1 IControl API 관련 자료형 • AEETextInputMode : 텍스트 컨트롤에 텍스트를 입력하는 데 사용할 수 있는 텍스트 입력 모드를 지정한다. • AEETextInputModeInfo: AEETextInputMode 및 ITEXTCTL_GetInputMode API를 사용하는 경우 버퍼에 채워지는 문자열을 모드를 지정한다. • AEEMenuColors: 다양한 메뉴 컨트롤 개체 요소에 사용되는 색 값을 지정한다. • AEEMenuColorMask: 색을 변경해야 하는 항목을 가리키는 마스크 집합 임베디드 모바일 프로그래밍
10. IControl API • 10.2 ITextCtl API 함수 • ITEXTCTL_SetRect 함수 • AEERect 데이터 구조를 제목이 아닌 텍스트의 크기를 결정하는 현재 경계 직사각형의 좌표로 채운다. 이 함수는 컨트롤을 만든 후 컨트롤의 최적/기본 크기 및 위치를 결정하는데 사용한다. 임베디드 모바일 프로그래밍
10. IControl API • ITEXTCTL_SetProperties 함수 • 텍스트 컨트롤 관련 속성 또는 플래그를 설정한다. 임베디드 모바일 프로그래밍
10. IControl API • ITEXTCTL_SetInputMode 함수 • 텍스트 입력 모드를 설정한다. 임베디드 모바일 프로그래밍
10. IControl API • ITEXTCTL_SetMaxSize 함수 • 텍스트 컨트롤 개체에서 지원하는 최대 텍스트 크기를 설정할 수 있다. 설정하려는 크기가 이미 설정되어 있는 크기보다 크면 이전 크기와 관련된 메모리를 비우고 새로운 크기의 메모리를 할당한다. 임베디드 모바일 프로그래밍
10. IControl API • ITEXTCTL_SetTitle 함수 • 텍스트 컨트롤 개체의 제목을 설정할 수 있다. pText가 NULL이 아니면 pText에서 지정한 문자열을 텍스트 컨트롤 개체의 제목으로 설정한다. pText가 NULL이면 리소스 파일에서 주어진 리소스 ID에 해당하는 제목 문자열을 읽어 텍스트 컨트롤 개체의 제목으로 설정한다. 임베디드 모바일 프로그래밍
10. IControl API • ITEXTCTL_SetActive 함수 • 텍스트 컨트롤 개체를 활성화한다. 활성 텍스트 컨트롤 개체가 받은 이벤트를 처리합니다. 임베디드 모바일 프로그래밍
10. IControl API • ITEXTCTL_GetText 함수 • 주어진 버퍼에 ITextCtl 인터페이스 개체와 관련된 텍스트를 최대 nMaxChars 문자까지 읽는다. 임베디드 모바일 프로그래밍
10. IControl API • 10.3 IControl API – 영어 단어 맞추기 예제(textcontrol) • 소스 프로그램 • textcontrol.h • #include "AEEAppGen.h" • #include "AEEUsageAppIDs.h" • #include "AEE.h" • #include "AEEShell.h" • #include "AEEDisp.h" • #include "AEEStdLib.h" • #include "AEEText.h" • #include "AEEImage.h" • #include "textcontrol.bid" • #define INPUT_LENGTH 10 • #define STATE_INPUT 1 • #define STATE_RESULT 2 • #define SHOWRESULT 3 • typedef struct _CTextControlApp • { • AEEApplet a; • ITextCtl *m_pIText_WORD; • AEERect m_rc; • char word[INPUT_LENGTH]; • IImage* pImage; • int input_mode; • int state; • }CTextControlApp; 임베디드 모바일 프로그래밍
10. IControl API • textcontrol.c • #include "textcontrol.h" • // 함수 선언 • boolean TextControlApp_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam); • boolean TextControlApp_InitAppData(IApplet* pi); • void TextControlApp_FreeAppData(IApplet* pi); • void TextControlApp_Word(CTextControlApp* pMe); • void TextControlApp_SetMode(CTextControlApp* pMe); • void TextControlApp_ShowResult(CTextControlApp* pMe); • void ChartoAECHAR(unsigned char* str, AECHAR* AEstr, int MAX); • void AECHARtoChar(AECHAR* AEstr,unsigned char* str, int MAX); • int AEEClsCreateInstance(AEECLSID ClsId, IShell* pIShell, IModule* po, void** ppObj) • { • *ppObj = NULL; • if(ClsId == AEECLSID_TEXTCONTROL) • { • if(AEEApplet_New(sizeof(CTextControlApp), ClsId, pIShell,po,(IApplet**)ppObj, • (AEEHANDLER)TextControlApp_HandleEvent,(PFNFREEAPPDATA)TextControlApp_FreeAppData) == TRUE) { • if (TextControlApp_InitAppData((IApplet*)*ppObj)) return(AEE_SUCCESS); • else • { • IAPPLET_Release((IApplet*)*ppObj); • return EFAILED; • } • } • } • return (EFAILED); • } 임베디드 모바일 프로그래밍
10. IControl API boolean TextControlApp_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam) { CTextControlApp* pMe = (CTextControlApp*)pi; AECHAR tempBuf[INPUT_LENGTH]; switch (eCode) { // 애플릿이 맨 처음 시작할때 ITextCtl 인터페이스의 인스턴스를 만든다. case EVT_APP_START: if(ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_TEXTCTL, (void **)&pMe->m_pIText_WORD) != SUCCESS) return FALSE; TextControlApp_Word(pMe); break; case EVT_KEY: // 키 이벤트 처리 // 우선 ITEXTCT_HandleEvent에서 키를 처리한다. if(ITEXTCTL_IsActive(pMe->m_pIText_WORD)) ITEXTCTL_HandleEvent(pMe->m_pIText_WORD, EVT_KEY, wParam, 0); MEMSET(tempBuf, 0x00, INPUT_LENGTH); // tempBuf를 초기화 한다. switch(wParam) { case AVK_SELECT : TextControlApp_ShowResult(pMe); // 결과를 보여준다. break; case AVK_CLR : if(pMe->state == STATE_RESULT) { IDISPLAY_ClearScreen (pMe->a.m_pIDisplay); TextControlApp_Word(pMe); } break; } break; } return TRUE; } 임베디드 모바일 프로그래밍
10. IControl API // 초기화 시킨다. boolean TextControlApp_InitAppData(IApplet* pi) { AEEDeviceInfo deviceinfo; CTextControlApp* pMe = (CTextControlApp*) pi; ISHELL_GetDeviceInfo(pMe->a.m_pIShell, &deviceinfo); SETAEERECT(&pMe->m_rc, 0, 0, deviceinfo.cxScreen, deviceinfo.cyScreen); pMe->input_mode=0; return TRUE; } // 메모리를 해제한다. void TextControlApp_FreeAppData(IApplet* pi) { CTextControlApp* pMe = (CTextControlApp*)pi; if(pMe->m_pIText_WORD != NULL) { ITEXTCTL_Release(pMe->m_pIText_WORD); pMe->m_pIText_WORD=NULL; } } 임베디드 모바일 프로그래밍
10. IControl API // 문자열을 입력받는 화면 구성 void TextControlApp_Word(CTextControlApp* pMe) { AEERect rect_word; AEEImageInfo imageinfo; pMe->state = STATE_INPUT; // 좌표설정 pMe->pImage = ISHELL_LoadImage(pMe->a.m_pIShell, "bana.bmp"); IIMAGE_GetInfo(pMe->pImage, &imageinfo); rect_word.x=pMe->m_rc.x; rect_word.dy=(pMe->m_rc.dy-20)/2; rect_word.y=pMe->m_rc.y+imageinfo.cy+25; rect_word.dx=pMe->m_rc.dx; ITEXTCTL_SetRect(pMe->m_pIText_WORD, &rect_word); // pMe->pImage = ISHELL_LoadImage(pMe->a.m_pIShell, "bana.bmp"); IIMAGE_Draw(pMe->pImage, 25, 10); IDISPLAY_Update(pMe->a.m_pIDisplay); IIMAGE_Release(pMe->pImage); ITEXTCTL_SetProperties(pMe->m_pIText_WORD, TP_FRAME); // 속성설정 ITEXTCTL_SetInputMode(pMe->m_pIText_WORD, AEE_TM_LETTERS); // 초기 input mode는 영문자 ITEXTCTL_SetMaxSize(pMe->m_pIText_WORD, INPUT_LENGTH); // 최대크기 설정 ITEXTCTL_SetTitle(pMe->m_pIText_WORD, NULL, NULL, (AECHAR *)"단어입력:\0"); ITEXTCTL_SetActive(pMe->m_pIText_WORD, TRUE); // 활성화 } 임베디드 모바일 프로그래밍
10. IControl API // 결과를 출력한다. void TextControlApp_ShowResult(CTextControlApp* pMe) { AECHAR szBuf[30] = {0}; char wdBuf[30] = {0}; pMe->state = STATE_RESULT; ITEXTCTL_SetActive(pMe->m_pIText_WORD, FALSE); IDISPLAY_EraseRect(pMe->a.m_pIDisplay, &pMe->m_rc); ITEXTCTL_GetText(pMe->m_pIText_WORD, (unsigned short *)pMe->word, INPUT_LENGTH); ChartoAECHAR((unsigned char*)"단어 : \0", szBuf, sizeof("단어 : \0")); WSTRCAT(szBuf, (const unsigned short *)"banana"); IDISPLAY_DrawText(pMe->a.m_pIDisplay, AEE_FONT_NORMAL, szBuf, -1, 0, 10, NULL, NULL); ChartoAECHAR((unsigned char*)"입력단어 : \0", szBuf, sizeof("입력단어 : \0")); WSTRCAT(szBuf, (const unsigned short *)pMe->word); IDISPLAY_DrawText(pMe->a.m_pIDisplay, AEE_FONT_NORMAL, szBuf, -1, 0, 30, NULL, NULL); AECHARtoChar((unsigned short *)pMe->word, (unsigned char *) wdBuf, sizeof(pMe->word)); if(!STRICMP("banana", wdBuf)) ChartoAECHAR((unsigned char*)"맞았습니다.", szBuf, sizeof("맞았습니다.")); else ChartoAECHAR((unsigned char*)"틀렸습니다.", szBuf, sizeof("틀렸습니다.")); IDISPLAY_DrawText(pMe->a.m_pIDisplay, AEE_FONT_BOLD, szBuf, -1, 0, 60, NULL, NULL); IDISPLAY_Update(pMe->a.m_pIDisplay); } Banana를 szBuf 문자열에 추가 대소문자를 구분하지 않고 문자열 str1과 str2를 비교한다. 임베디드 모바일 프로그래밍
10. IControl API // char를 AECHAR형식으로 변환한다. void ChartoAECHAR(unsigned char* str, AECHAR* AEstr, int MAX) { int i = 0; for (i = 0 ; i < MAX; i++){ if(*str & 0x80){ MEMCPY(AEstr, str, sizeof(AECHAR)); str += 2; } else{ *AEstr = *str; str++; } AEstr++; } *AEstr = 0; } void AECHARtoChar(AECHAR* AEstr, unsigned char* str, int MAX ) { int i = 0; for (i = 0 ; i < MAX; i++) { if(*AEstr & 0x80) { MEMCPY(str, AEstr, sizeof(AECHAR)); AEstr += 1; str++; } else { //*str = *AEstr; MEMCPY(str, AEstr, sizeof(AEstr)); AEstr++; } str++; } *str = 0; } 임베디드 모바일 프로그래밍
10. IControl API 10.4 실행 결과 임베디드 모바일 프로그래밍