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

공부/C 언어  2013.02.07 09:00



안녕하세요 명월입니다.

 

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

 

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

 

 

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

 

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

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

 

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

 

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

 

 

 

 

 

 

 

 

 

 

 

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

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

 

 

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

 

 

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

 

 

 

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


결과 화면입니다.

 

 

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

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

 

 

 

 

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

 

 

  1 CMFCToolBar::SetBasicCommands(lstBasicCommands);
  2 
  3 CCreateContext ccx;
  4 ccx.m_pNewViewClass = RUNTIME_CLASS(MainView);
  5 
  6 m_pMainView = DYNAMIC_DOWNCAST(MainView,CreateView(&ccx));
  7 
  8 m_pMainView->ShowWindow(SW_SHOW);
  9 m_pMainView->OnInitialUpdate();
 10 
 11 SetActiveView(m_pMainView);
 12 
 13 m_pMainView->ResizeParentToFit(FALSE);

 

결과 화면 입니다.

 


 

관련 소스입니다.

 

TestSource.zip


댓글 4개가 달렸습니다.
댓글쓰기
  1. BSH
    2015.03.20 08:20 신고 |  수정/삭제  댓글쓰기

    비주얼 스튜디오 2012 인데요,
    'MainView' 클래스 추가하면요.

    " 'IDD_MAAINVIEW' 대화 상자의 컨트롤을 검색하지 못했습니다."

    라는 오류 구문이 뜨네요 .... ㅠㅠ

  2. BSH
    2015.03.20 08:33 신고 |  수정/삭제  댓글쓰기

    제가 SDI 리본으로 프로젝트를 생성했는데, 그게 문제가 된 걸까요 ?

    • 明月 v명월v
      2015.04.20 00:00 신고 |  수정/삭제

      안녕하세요... 블로그 방문 감사합니다.
      상황을 정확하게 몰라 어떻게 써드리기가 그렇지만..
      단순히 그런 문제만이 아니고 리소스코드랑 소스상의 데이터 값이 안 맞는 건 아닌가요???

  3. Jun
    2015.11.13 16:05 신고 |  수정/삭제  댓글쓰기

    혹시 새파일이나, 파일열기 이벤트에 관련된 처리는 어떻게 하는지 아시나요? 이렇게하면 오류가 날거 같은데요..