2008/06/18 12:20

만만치않은 UI 프로그래밍

 
사용자 삽입 이미지

PMP에 들어갈 모듈중 하나인 "파일브라우저" 하나를 구현하는데 벌써 클래스만 20개가 다되간다.
앞으로 구현해야할 모듈이 6개는 더되는데...
그래도 일단 파일브라우저 하나는 어느정도 끝이보이는지라... 중간 작업물을 올려본다.
그리고.. 몇가지 골치아팠던 부분...

1. Native c/c++ 와 통신을 하는지라 동기화를 철저히 해야했다.
    Native c/c++ 에서 던져주는 데이타들이 이벤트 기반이기때문에(block방식이 아님) 동기화에 상당히 많은 신경을 써야했다. 객체의 라이프사이클을 철저하게 관리해서 이 난제를 극복했다. 즉, 객체의 초기화와 그 이후의 행동에 대해서 철저하게 분리하여 프로그래밍 하는것이다. 또한 각 기능별로 매니저 클래스를 둠으로써 코드들을 깔끔하게 분리할 수 있었다. CDialogMgr, CFbMgr이 매니저 클래스이다.
매니저 클래스에서는 주로 Native 함수를 호출하고, 데이타를 전달받아 스크립트단 버퍼에 채워넣는 일을 한다.
만약 이러한 코드들이 매니저클래스없이 한클래스안에 묶여져있었다면 코드가 난잡해져서 가독성이 현저하게
떨어졌을 것이다.

2. 스크롤바.
    파일브라우저에서 리스들은 페이지단위로 스크롤 되어야하기떄문에 스크롤바또한 이것에 맞춰져야했다.
"스냅"(딱딱 달라붙는 듯한효과)방식으로 스크롤바를 만들었다.리스트가 갱신될때마다 총 페이지수를 구한후
스크롤바의 reInit(numPages) 함수를 호출하여 스크롤바또한 리프레쉬를 시켜준다.
리스트의 총페이지 수만큼 스크롤바의 스냅 포지션의 수가 정해진다. 이 스냅포지션은 arrPos라는 배열에 할당되며 사용자가 스크롤할때마다 arrPos의 포지션값중 가장 가까운 값을 찾아 그 위치로 스냅하게된다.
스크롤이벤트가 발생되면 스크롤바는 이벤트를 발생시켜 파일브라우저 리스트에 타겟 페이지넘버를 넘겨준다.
파일브라우저는 넘겨받은 타겟 페이지넘버를 가지고 보여져야할 파일객체의 시작인덱스를 계산하여
스크립트단 버퍼에 접근하여 파일객체들을 배열형태로 가지고온후에 리스트화면에 렌더링한다.


이올린에 북마크하기(0) 이올린에 추천하기(0)
Trackback 0 Comment 4