MDI 란?
- Multiple Document Interface 의 약자로, 한개의 창에서 여러가지 작업을 할 수 있는 인터페이스를 뜻한다.
가장 대표적인 예로 사진수정의 친구 '포토샵' 을 들 수 있다.
SDI 란?
- Single Document Interface 의 약자로, MDI 와는 반대되는 개념이라 할 수 있다. 한개의 창에서 한가지 작업밖에 할 수 없는 인터페이스를 뜻하기 때문이다. SDI의 가장 대표적인 예는 '메모장' 이 있다.
Visual Studio & MDI
- Visual Studio (줄여서 VS) 를 실행시키면 (프로젝트 파일로 바로 실행 시키는 것 말고 프로그램만 실행시켰을 때) 제일 처음에 볼 수 있는 화면에 메뉴, 툴박스, 솔루션 익스플로러 등등 여러가지가 있지만 가장 큰 비율을 차지하고 있는 것이 'Start Page' 이다.
그리고 이 스타트페이지에서 최근 프로젝트나 새 프로젝트 만들기, 프로젝트 열기 등
어떠한 메뉴를 클릭하면 해당 페이지가 화면에 뜨게 된다.
이 스타트 페이지와 메뉴 선택후 뜨는 페이지가 VS 메인폼의 MDI 자식폼이라고 할 수 있다.
메인 폼 자체의 형식이나 틀은 변하지 않으면서 작업을 할 수 있는 화면으로 전환되고, 클래스 프로젝트 등
여러개의 파일을 띄워놓고 이리저리 왔다갔다 하면서 작업을 할 수 있도록 구성해 놓았다.
MDI 자식폼 만들기
- MDI 가 무엇인지 알았으니 VS의 Start Page를 모델로 메인폼에 MDI 자식폼을 만들어 보자.
![](http://postfiles8.naver.net/20110214_39/cjej1004_129765974763229vqN_PNG/%B8%DE%C0%CE%C6%FB.png?type=w3)
메뉴스트립, 툴스트립, 판넬 등등 윈폼에서 기본 제공 해 주는 툴로 메인폼의 틀을 만들었다.
위 사진에서 빨간색 네모로 둘러진 회색 영역이 Start Page가 들어갈 자식폼 영역이 된다.
모양을 다 만들었다면, 메인폼의 속성에서 IsMdiContainer 를 찾아 True 로 바꿔주자.
IsMdiContainer가 폼을 MDI로 제작할 수 있도록 해주는 속성이다.
자 메인폼의 디자인 준비는 끝났다.
이제 메인폼에 넣어줄 자식폼인 Start Page의 디자인을 해보자.
![](http://postfiles9.naver.net/20110214_8/cjej1004_1297660202782pLtv8_PNG/%BD%BA%C5%B8%C6%AE%C6%E4%C0%CC%C1%F6.png?type=w3)
뭐 별거 없다. Start Page는 그냥 본인이 만들고 싶은대로 만들도록 하자.
이 아이는 메인폼처럼 속성을 바꿔주고 이런것도 없다. 그냥 폼 디자인만 하면 자식폼으로 넣어줄 수 있다.
메인폼과 자식폼의 디자인을 다 했으니 이제 코딩으로 넘어가자.
![](http://postfiles14.naver.net/20110214_45/cjej1004_1297660440823izBRK_PNG/%B8%DE%C0%CE%C6%FB%BB%FD%BC%BA%C0%DA.png?type=w3)
메인폼의 생성자 부분이다.
폼이 로드 되자마자 이벤트가 발생하도록 생성자에 메인폼 로드이벤트를 넣어주자.
![](http://postfiles2.naver.net/20110214_289/cjej1004_1297663324146roX3h_PNG/%B8%DE%C0%CE%C6%FB%B7%CE%B5%E5.png?type=w3)
메인폼 로드 부분이다.
자식폼으로 들어갈 StartPage를 생성해주고, 자식폼의 MDI 폼으로서의 부보는 현재폼으로 해준뒤
창크기 최대화로 상태를 설정해 주고 startPage를 보여주도록 했다.
이렇게만 하면 MDI 자식폼을 생성하여 보여주는 것 끝이다.
그럼 이제 다른 작업을 위해 쓸모없어진 startPage를 지워보자.
![](http://postfiles7.naver.net/20110214_70/cjej1004_129766337816135iWS_PNG/%C0%DA%BD%C4%C6%FB%B4%DD%B1%E2.png?type=w3)
닫기 메뉴를 클릭했을 때, 현재 폼의 MDI자식의 길이만큼 for문을 돌린다.
for문 안에서 두번의 검사를 한다.
하나는 자식의 i번째가 '폼' 인지, 맞다면 그것의 이름이 "StartPage"인지.
두 조건에 해당하면 자식의 i번째를 지우도록 한다.
이렇게 하면 지우고 싶은 자식폼의 크기만큼 지울 수 있다.
![](http://postfiles15.naver.net/20110214_270/cjej1004_1297661576890mYkUK_PNG/%B8%DE%C0%CE%BD%BA%C5%B8%C6%AE%C6%E4%C0%CC%C1%F61.png?type=w3)
쨔잔 메인폼에 StartPage 가 들어간 모습 !
위에 제목표시줄 보면 '고객관리프로그램 - [StartPage]' 로 자식폼의 이름이 추가된 것을 볼 수 있고,
자식폼의 창 최소화, 최대화, 닫기 상태메뉴가 추가 된 것을 볼 수 있당 !
![](http://postfiles15.naver.net/20110214_190/cjej1004_1297661871535nslbV_PNG/MDI_%BF%CF%BC%BA%BC%A6.png?type=w3)
쨔쟈잔 위 방식을 응용하여 요렇게 여러개의 폼을 일정 영역에 띄운모습 !
얘네들을 탭 컨트롤 툴로 만든다면 VS처럼 탭으로 요창저창 왔다갔다 할 수 있당 !
우왕 쉽다 !!!!!!!!
디자인만 더 이뿌게 가다듬어서
우리 모두 바로 작성하는 프로그램 말고 스타트 페이지가 있는 이쁜 프로그램을 만들어 보아욤