#34. MDI vs. SDI

요 근래에는 수업 시간에 MDI (Multi Document Interface)에 대해서 실습해 보고 있습니다. 이제까지는 쭉 SDI (Single Document Interface)를 기반으로 작성해 나갔었던 프로그램이 대다수였습니다만, 앞으로 개발하게 될 상용 어플리케이션이나 보편적인 에디터들은 특수한 경우가 아니고서는 대개 MDI로 처리합니다.


MDI와 SDI는 그 모양새와 확장성에서 큰 차이가 드러납니다. 하지만, 프로그래밍 방법이나 클래스의 설정에 있어서도 차이가 있을까요? 아닙니다. SDI 시절 때 프로그래밍하던 방법을 MDI와서도 그대로 쓰십시오. 아무런 문제가 되지 않습니다.


다만, 메인 프레임 윈도우 밑에 딸려있는 자식 윈도우들을 일괄적으로 컨트롤 (Batch Control)하기 위해서 CChildFrame이라는 클래스의 쓰임새를 알아두기만 하면 어려울 것이 하나도 없습니다.


MDI 기반으로 어플리케이션을 작성할 경우, 실제로 SDI때에는 보이지 않았던 몇 가지 항목들이 더 들어가있습니다. 하지만, 어렵게 생각하실 필요는 전혀 없습니다. MDI에서 이상해질 수 있는 인터페이스를 고쳐주기 위하여 등록된 약간의 리소스와 차일드 윈도우들을 띄워줄 수 있는 CChildFrame 클래스의 추가가 전부이니까요.


일단, MDI 기반의 어플리케이션에서는 메인 프레임 아이콘과 도큐먼트 아이콘 두 개로 분리되어 리소스에 저장되어있습니다. 왜냐하면, MDI의 경우 SDI처럼 메인 프레임이 직접 뷰와 도큐먼트를 관리하지 않고 다만 차일드 윈도우들의 디스플레이 영역으로서만 역할을 하기때문이죠. 실질적으로는 차일드 윈도우들이 뷰와 도큐먼트 클래스를 점유하고 있는 것입니다. 그렇기 때문에 차일드 윈도우에 표시해줄 아이콘이 필요한 것이죠.


두 번째로, MDI 기반의 어플리케이션에서는 메뉴 리소스가 두 개가 포함되었습니다. 하나는 차일드 윈도우가 하나 이상 띄워져있을 때의 메인 프레임에 표시될 메뉴이며, 또 하나는 차일드 윈도우가 띄워져있지 않을 때의 빈 메인 프레임 창에서 표시될 메뉴입니다. 이 두 메뉴의 차이는 크게 다르지 않습니다. 뷰/도큐먼트 및 차일드 윈도우에 대한 옵션 설정 메뉴의 유무의 차이입니다.


실제로 수업에서 언급하게 될 클래스는 다름아닌 CChildFrame이란 클래스때문입니다. 이 클래스를 가지고서 여러분은 마음대로, 원하는대로 자유롭게 차일드 윈도우들을 일괄 컨트롤할 수가 있습니다.


이 CChildFrame 클래스는 결국 CMainFrame 클래스와 아주 유사한 꼴입니다. 다만, 윈도우를 로드할 때 차일드 스타일이 미리 적용된 상태에서 로딩이 된다는 점과, 개별적인 프로세스로서 취급되지는 않는 다는 것, 메인 프레임에 종속적이어서 메인 프레임의 실행과 종료에 따라서 띄워진 모든 차일드 프레임 윈도우에도 같은 영향을 준다는 점이 다릅니다.  

댓글 남기기