[쥬니] 전환점

블로그 이미지
시작!
by eiliyuki
  • 8,896Total hit
  • 0Today hit
  • 0Yesterday hit

사용자 삽입 이미지

벌써 한참전에 마친 작업이지만 혹시나 정보가 될까 해서 포스팅 합니다. ^^
세부적인 코드는 프로젝트가 끝나거나 정리가 되면 올리겠습니다. 

당초 Dialog 기반으로 작성하다가 MDI 로 변경해서 구성한 레이아웃입니다.
처음보다 요구사항이 조금 더 추가 되고 성격이 조금 변하면서 Dialog 기반의 한계와 코드 집적으로 인한 가독성이 상당히 문제가 되어서 MDI 로 변경하였습니다.

변경하면서 기존에 클래스로 분리해둔 각각의 모듈들 덕택에 상당히 쉽게 바꿀 수 있었습니다.
하지만 MDI 베이스는 처음이라 구조 파악에 상당히 애를 먹었네요.

지향하는 방식은 Single Document - Multi View 였는데 Multi View , 그리고 Frame, Document 간의 관계가 어떻게 성립되는지 파악하고 별도의 관리 클래스를 제작하는데 시간이 많이 소비되었습니다.

현재 Child Frame 는 별도로 제작한 Window Manager,  View Manager 두개의 클래스에서 당담하도록 되어있고 평소의 Main Frame 은 Child Frame 의 포인터를 관리하지 않기 때문에 존재를 전혀 모릅니다.
View Manager 은 Child Frame 와 1:1 로 매칭되기 때문에 하나의 차일드 윈도우는 하나의 View Manager 이라는 공식이 성립하며, Window Manager 은 이 View Manager 을 관리하는 클래스입니다.

ViewManager 에서는 해당 차일드에 대한 그리기, 아이덴티티, 윈도우 삭제, 정보 를 관리하고 직접 Child Frame 의 포인터를 가지고
있으며, Child Frame 에서 DC 추출하여 직접 가지고 있게 되어있습니다.
WindowManager 은 뷰매니저의 추가, 삭제, 찾기, 차일드 리스트를 가지고 있어 차일드 윈도우'들'을 관리하는 구조로 되어있습니다.

ViewManager 과 WindowManager 은 기본 MFC Document-View 구조를 랩핑하는 구조로 구성되어 있습니다.

MDI 구조로 옮겨오면서 상당히 건드려야 될 부분이 많아졌기 때문에 팀원들에게 사용하기 쉽게 인터페이스를 제공하기 위해서 차일드 윈도우를 생성하는 부분의 경우 별도의 멤버 함수를 추가하여 ViewManager 과의 연동을 통해 아이덴티티를 체크하고 윈도우 생성하는 부분을 사용하기 쉽도록 하나의 함수로 묶고 많은 작업을 한곳에서 가능하도록, 그리고 새롭게 사용자가 추가할 함수에 대해서는 일정한 규격을 사용하도록 제한하도록 하여서 MDI 구조상에서 대부분 소스파일은 건드리지 않아도 기능 추가가 가능하도록 하였습니다.

그래서 Dialog 기반만큼은 아니지만 복잡한 구조를 숨기고 그 위에서 쉽게 프로그래밍 할 수 있는 환경을 구성하였습니다.


중요한 부분중 하나인 VS2008 Feature Pack 에서 도입된 MFC Next 버전에서 지원하는 Ribbon Interface 를 통해서 상당히 직관적이고 세련된 인터페이스를 제공할 수 있게 되었습니다.

리본인터페이스 프로그래밍에 대해서는 다음에 시간을 할애하여 포스팅 할 예정입니다. ^^

TRACKBACK 0 AND COMMENT 0

ARTICLE CATEGORY

분류 전체보기 (14)
쥬니 이야기 (7)
게임 프로그래밍 (7)

RECENT TRACKBACK

CALENDAR

«   2018/12   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

ARCHIVE