posted by REDFORCE 2017. 3. 12. 22:22

[Engine WindowSystem]


이 글에서 다룰 문제는


FrameWork에서 만들어 둔 함수 내용들을 GUI 형태로 제어할 수 있도록

EngineGUI를 어떤 구조로 만드냐가 문제입니다.



유니티 3D를 참고로 정리해 본 UI 형태는


1. 메인 HWND (저는 Engine Main-Window 로 부르고 있습니다) 가 최상위로 존재하고

(메인 HWND는 Menubar를 갖고 있음)


2. 첫 번째 자식 윈도우 (First Child-Window 라 부르고 있습니다)

 - 화면(카메라 컨트롤)

 - 선택한 오브젝트 이동/회전/스케일 조정

 - 엔진 재생/일시정지 등 UI Layer 조정


을 할 수 있는 버튼이 있음


3. 각각의 Window( Scene / Game / Project / Hierarchy / Inspector 등 Second Child-Window)

 - 각 Window는 Menubar / Caption / Titlebar 가 없음

 - 기본적으로 하나이상의 TAB ITEM을 갖고 있음

 - 해당 탭에 들어갈 자식 Window가 있음

   ( TAB Item의 Window는 여러 방식이 있음

    예: 게임렌더링 화면 / 폴더 리스트 뷰어 / 어떤 정보항목 등)


가 있는 구조 였습니다.



해서 정리해본 결과...


First Child Window 까지는 직접 EngineSystem에서 구현해도 무난하겠다 싶어서 포함을 시켰습니다.

각각의 Window는 



EngineWindow 라는 클래스를 생성하고 얘를 항상 부모로 담도록 하자.


라고 생각하고 EngineWindow 에서 생성 되면 First Child-Window 를 부모로 하여

Default 위치값을 줘서 Window를 생성하도록하게 했습니다.



대충 틀을 잡아 본 형태가 위 사진과 같군요.

(아직 #01에서 다루는 두 개의 렌더링 화면 출력이 해결 되지 않은 사진 입니다)


이제 문제가...각 윈도우들은 1개이상의 TAB Item을 갖고 있는 TAB 컨트롤러 라는 것인데

해당 Second Child-Window는 TAB Control을 갖고있는 Window이고


해당 TAB 의 Item 항목은 각각의 Window들을 갖는 구조로 넣을 수 있도록 받게 해야합니다.




그러면... TAB에 Item 항목으로 들어갈 내용들 또한 어떤 Window(HWND) 라는 것인데...


이 내용들은 전부다 하나의 Engine-Window Class를 부모로 하는 Tab Item 항목들이라는 게 될 거라보입니다.


따라서 TAB Item 항목으로 들어갈 수 있는 구조로 만들어서 본 글을 업데이트 하도록 하겠습니다.