[MFC] SDI 에서 Doc, View 없애고 Form 띄우기


Study/C , C++ , MFC  2013. 2. 7. 09:00

안녕하세요. 명월입니다.

 

이번 포스팅에서는 SDI를 이용하여 마치 다이알 로그 폼뷰 효과(?)를 내는 방법에 대해 알아보도록 하겠습니다.

 

보통 MFC로 작업을 하게 되면 SDI, MDI, Dialog 중 하나를 선택하게 되겠습니다.

SDI로 개발 해 본 분들은 하시겠지만 Frame을 형성해서 개발하는 것이 Dialog 위에 붙히는 것보다 훨신 간단하고 쉽다는 걸 아실 겁니다. 그런데 SDI로 생성하면 Doc, View 도 설정해야 하기 때문에 번거롭습니다.

 

그렇다면 우리가 원하는 SDI위에 Doc, View를 떼어 내고 Formview 객체를 그위에 띄운다면

Dialog 에 메뉴 스테이스바가 갖추어진 기본 프로젝트가 생성되겠습니다.

 

그럼 그 방법에 대해 알아보도록 하겠습니다..

 

먼저 프로젝트를 SDI로 생성하겠습니다.

위 사진을 확인해 보면 Doc 파일과 View 해더 파일이 있는 걸 확인 하실 수 있습니다.

그럼 그 두 파일을 삭제 해보도록 하겠습니다

메인 소스에 들어가 해더 선언부분을 삭제하도록 하겠습니다.

그리고 초기화 부분에 SDI로 선언되는 부분을 삭제 하고 아래와 같으 프레임을 띄우겠습니다

CMainFrame* pMainFrame = new CMainFrame();
m_pMainWnd = pMainFrame;
pMainFrame->LoadFrame(IDR_MAINFRAME);

결과 화면입니다.

보시는 건 하얀색 바탕이지만 아무것도 없는 프레임 형태 입니다.

이제 저기에 Formview를 탑재하겠습니다.

클래스 를 생성하였으면 Frame의 onCreate 이벤트 안에 아래와 같은 소스를 추가 하겠습니다.

CMFCToolBar::SetBasicCommands(lstBasicCommands);

CCreateContext ccx;
ccx.m_pNewViewClass = RUNTIME_CLASS(MainView);

m_pMainView = DYNAMIC_DOWNCAST(MainView,CreateView(&ccx));

m_pMainView->ShowWindow(SW_SHOW);
m_pMainView->OnInitialUpdate();

SetActiveView(m_pMainView);

m_pMainView->ResizeParentToFit(FALSE);

결과 화면 입니다.


관련 소스입니다.

TestSource.zip