TP-4000 리소스 수정 방법에 대한 설명

목적: Win CE 3.0의 리소스들을 의도하는 모양으로 바꾸고자 한다.

- 이미지내에서 리소스는 크게

1.제어판의 리소스

2.그 외의 리소스

로 나누어 진다.

1. 제어판 리소스 수정 방법

제어판 리소스는 Landscape(320x240)과 Portrait(240x320)의 두가지 타입이 PB에 작성되어 있다. 이 확인은 public\WCESHELLFE\oak\ctlpnl\cplmain\cplmain.rc를 열어 보면 된다.

이것을 build -cf하면 cplmain.rc가 컴파일되어 오브젝트 파일들이 생성되어 이미지에 첨부될 수 있도록 준비된다. cplmain.rc에는 두가지 타입 모두의 리소스들이 제공되는 데, 이중 우리가 필요한 Portrait(240x320)의 리소스만을 사용하는 것은

public\MyBSP\wince300\oak\misc\cesysgen.bat(웜본:public\maxall\oak\misc\cesysgen.bat)를 수정하는 것으로 가능하다.

cesysgen.bat file에 보시면 아래와 같은 부분이 있습니다......

REM // choose L (landscape, i.e. HPC style) or P (portrait, i.e. PsPC-style) resources for CPLMAIN

if "%CPLMAIN_LP%"=="" set CPLMAIN_LP=L

REM // If set to '1' then convert to Portrait

if "%CPLMAIN_LP%"=="1" set CPLMAIN_LP=P

즉 %CPLMAIN_LP%를 1로 설정하면 Portrait(240x320) 타입을 사용하는 것으로 설정된다.

%CPLMAIN_LP%를 1로 설정하는 방법을 모르겠으면

if "%CPLMAIN_LP%"=="" set CPLMAIN_LP=L 를

if "%CPLMAIN_LP%"=="" set CPLMAIN_LP=P 로 수정해도 되겠다.

이상으로 제어판의 이소스의 수정은 끝이다.

2.제어판 이외의 리소스 수정하는 방법.

우선 새 플랫폼을 작성하여 generate platform header와 build platform을 실행한 후의 상황에서 설명을 하는 것으로 한다. 그 이유는 오리지날 리소스 오브젝트 파일은 수정하지 않는 것으로 하고, 단지 복사 본에 대해서만 수정하는 것으로 하지 위해서 이다.

build platform을 실행한후 Public\MyBSP\wince300\cesysgen\oak\target\arm\arm720\retail

(sysgen generate하면 여기에 source가 생긴다. 그리고 rebuild하고 file copy한 후에는 MyBSp에 source가 생긴다.)

여러 locale이 생성되어 있는 것을 볼 수 있는데, 여기서 해당되는 country로 들어가 보자.

locale은 KOREA로 정하고 KOR로 이동한다. 그러면 많은 res 파일이 있을 것이다.

이 파일들이 이미지에 들어갈 오브젝트 형태의 리소스 파일들이다.

이 파일들을 evtc++3.0 을 이용하여 각각 열어서 수정해야 할 리소스를 포함하고 있는 파일들을 찾는다.

아래 내역은 찾아 본 리소스들(public\WCEAPPSFE나 WCESHELLFE에 들어있다)이며, 해당 로케일 폴더의 모든 리소스에 대한 내역이 파악되기를 기대한다.(현재 수정된 사항은, airsaction상에서 직접 파악 할 수 있는 부분에 한해서이다. 그리고 아직 요구사항이 없었으므로 image에 수정사항을 포함시키지 않았다.)

explorer.res : windows explorer에서 사용되는 리소스로서 시작 메뉴의 실행창 등

ceshell.res  : 파일 삭제나 카피시 나타나는 리소스 등

webview.res  : internet explorer의 옵션창, 등록 정보창 등

pwd_res.res  : pocket word의 파라그래프, 탭 창 등(한글,영문 동일)

pmail.res    : Inbox의 옵션창 등(한글,영문 동일)

smtp.res     : Inbox->option->service->Add 버튼의 리소스(한글,영문 동일)

(When service type is POP3 mail)

imap4.res    : Inbox->option->service->Add 버튼의 리소스(한글,영문 동일)

(When service type is IMAP4 mail)

office.res   : pocket word의 폰트 리소스(한글,영문 동일)

이들 리소스들을 다음에 설명할 방법으로 수정하여 Build\Rebuild Platform하면 된다.

이제 리소스를 수정해 보자.

STEP 1. 우선 EVTC++ 3.0을 실행한다.

STEP 2. file\new를 실행한다.

project name을 resreplace로 정하고 위와 같은 세팅으로 맞추고 OK

STEP 3.

language는 영어로 하고 Finish

STEP 4.

리소스 탭에서 모든 리소스를 삭제하고 file\open에서 필터를 리소스 파일로 정하고 수정할 res 파일을 불러온다. 여기서는 explorer.res를 불러오는 것으로 한다.

STEP 5.

file\open으로 연 explorer.res의 리소스들을 resreplace resource로 카피한다.

방법은 copy와 paste의 방법이다.

그리고 explorer.res를 닫는데 resave하지 말고 닫는다

STEP 6.

위 상태에서 Build\Build resreplace.exe 실행한다.

STEP 7.

리소스만 컴파일 하면 되므로 Compling resources...에서 stop 시키고

결과 파일인 resreplace.res를 보면 explorer.res와 동일함으로 확인 할 수 있다.

이젠 resreplace.res파일을 GUI에서 수정하여 explorer.res(retail)의 위치에 옮기고       rename하여 PB에서 Rebuild paltform(Rebuild해야만 RES2EXE가 실행되고, 이것을 해야만    MyBSp에 파일이 생긴다. rebuild는 release 파일만 지우므로 ROMruntime만 copy하면        된다.)으로 실행하면 된다.

*** 작업 과정에서 발생된 문제점

수정되기 전의 결과 파일인 resreplace.res가 원본파일과 완전 동일하게 생성되지 않는 경우가 발생하기도 하는데 별 문제는 없는 것으로 보인다.

하지만 webview.res와 imap4.res는 리스트 박스의 string 이 깨지는 현상이 보였는데

webview.res는 EVTC++3.0에서 file\open으로 열어서 webview.res 자체를 수정하여 resave하는 방법으로 해결했다. 이 과정에서 보기\옵션\고급\보안설정의 창이 깨지기에 아예 보안설정 버튼을 없앴는데 아무래도 원안 같지는 않다.

imap4.res에서 string이 깨지는 것은 스텝 5까지 실행한 후 resreplace.rc 파일을 에디터에서 열어서 해당 스트링 말미에 여러 바이트의 스패이스를 넣어서 리스트 박스에서 문자 깨짐이 보이지 않게 하는 방법으로 해결 했는데 이 또한 마음에 들진 않는다.

*** 작업 과정에서 발생된 문제점에 대한 해결 방법

스트링에 깨지는 것은 각 스트링의 말미에 NULL(0x0000) 문자가 삽입되어 스트링의 끝임이 명시 되어야 하는데, EVTC++에서 컴파일된 오브젝트 파일인 .res엔 NULL이 삽입되지 않고 있다. 그래서 EVTC++환경에서 각 스트링의 말미에 □aa"등의 구분 가능한 문자를 넣고 컴파일하여 생성된 .RES를 핵사 에디터로 열어서 각 스트링 말미의 "aa", 즉 0x6100 0x6100을 0x0000 0x0000으로 치환하여 최종 수정 완료된 .RES 로 확정한다.

C++에서 수정할 파일 불러, string의 모든 말미에 □aa'와 같은 특정 문자를 넣어주고, build --> res 파일을 Hex editor로 연다 --> aa를 00으로 바꿔준다. (replase사용하여  바꿈)  61006100을 00000000으로 바꿈.  (6100은 a의 ASCII값에 00를 붙인 것으로, 유니코드이다. 영어의 유니코드는 ASCII 뒤에 00 2개 붙이면 된다.)