2016. 10. 23. 21:48 MFC/기초
MFC) SDI에서 Doc/View 없애고 MainFrame만 띄우기
Doc/View를 없애기 위해서는 우선 App과의 연결고리를 끊어야만 한다.
1. xxx.cpp(CWinApp)파일로 이동
BOOL CWinApp::InitInstance()
{
....
// 응용 프로그램의 문서 템플릿을 등록합니다. 문서 템플릿은
// 문서, 프레임 창 및 뷰 사이의 연결 역할을 합니다.
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CFTPServerDoc),
RUNTIME_CLASS(CMainFrame), // 주 SDI 프레임 창입니다.
RUNTIME_CLASS(CFTPServerView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
......
}
2. 상위 코드를 삭제한다. (필자는 만약을 대비하여 주석처리 하였다.)
3. 삭제한 코드 아래에 코드 추가.
BOOL CWinApp::InitInstance()
{
....
// 응용 프로그램의 문서 템플릿을 등록합니다. 문서 템플릿은
// 문서, 프레임 창 및 뷰 사이의 연결 역할을 합니다.
// CSingleDocTemplate* pDocTemplate;
// pDocTemplate = new CSingleDocTemplate(
// IDR_MAINFRAME,
// RUNTIME_CLASS(CFTPServerDoc),
// RUNTIME_CLASS(CMainFrame), // 주 SDI 프레임 창입니다.
// RUNTIME_CLASS(CFTPServerView));
// if (!pDocTemplate)
// return FALSE;
// AddDocTemplate(pDocTemplate);
// 추가된 코드(MainFrm)
CMainFrame* pMainFrame = new CMainFrame();
m_pMainWnd = pMainFrame;
pMainFrame->LoadFrame(IDR_MAINFRAME);
.....
}
4. CWinApp.cpp 상단에 include된 Doc/View 헤더파일 삭제.
(필자는 만약을 대비하여 주석처리 하였다.)
#include "stdafx.h"
#include "afxwinappex.h"
#include "afxdialogex.h"
#include "FTPServer.h"
#include "MainFrm.h"
// #include "FTPServerDoc.h"
// #include "FTPServerView.h"
5. Doc/View 파일(형광펜 부분) 삭제. (필자는 만약을 대비하여 삭제하지 않았다.)
6. 완료.
7. 추가 - View를 없앤 후 작업을 위하여 FormView를 MainFrm에 삽입하여 보자.
- 클래스 이름 : 센스것.
- 기본 클래스 : CFormView 선택
- 대화 상자 ID : 자동으로 설정되는 경우가 있으나, 안될 경우 IDD_xxxx의 형식으로 이름 기입.
- 나머지 자동
2) 리소스 -> Dialog에 해당 FormView가 설정됨을 확인할 수 있다.
!!!!! 여기서 주의!!
- 클래스 마법사를 이용하여 바로 Dialog와 클래스를 동시에 만드는 경우 말고 Dialog 추가 후 해당 Dialog를 타고 클래스를 만드는 사람이 있다.(필자포함...) 이 경우 Dialog가 FormView가 아닌 기본 Dialog로 만들어지기 때문에 해당 Dialog를 타고 클래스를 추가할 경우 FormView를 선택하여도 실행 시 에러가 난다. 이는 생성한 Dialog가 FormView의 역할을 소화하기위한 속성 변경이 제외되었기 때문이다. 이럴 경우 새로만둔 FormView용 Dialog의 속성에 들어가서 "Border : None / Style : Child"로 반드시 설정해야만 한다.
3) MainFrm.cpp의 OnCreate에 FormView를 삽입하기 위한 코드를 넣음.
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)\
{
......
CCreateContext ccx;
ccx.m_pNewViewClass = RUNTIME_CLASS(FromView연동 Class명);
m_pMainView = DYNAMIC_DOWNCAST(FromView연동 Class명, CreateView(&ccx));
m_pMainView->ShowWindow(SW_SHOW);
m_pMainView->OnInitialUpdate();
SetActiveView(m_pMainView);
m_pMainView->ResizeParentToFit(FALSE);
....
}
8. 완성
'MFC > 기초' 카테고리의 다른 글
MFC) LPSTR, LPCSTR, LPTSTR, LPCTSTR 설명 (0) | 2016.12.13 |
---|---|
MFC) 각 구성요소 간 포인터 얻어오기 (0) | 2016.10.23 |
MFC) Dialog(대화상자) 생성 및 클래스 연결 (0) | 2016.10.23 |
MFC) MFC의 기본 종류 및 구조 (0) | 2016.10.23 |
MFC) SDI 프로젝트 생성 (0) | 2016.10.23 |