Post List

2014년 12월 25일 목요일

[MFC] MDI 에 다른 Template의 Child 추가

새로 추가하는 Template 의 View 이름이 CNewFormView 라고 한다면...

1. 새로운 Template 추가
 - Project에서 추가 -> Class 하여 Add Class Wizard 실행
 - CFormView를 상속받은 CNewFormView 생성
 - CDocument를 상속받은 CNewFormDoc 생성

2. Template 등록

- App Class 의 InitInstance()에서

CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_[프로젝트명]TYPE,
RUNTIME_CLASS(C [프로젝트명] Doc),
RUNTIME_CLASS(CChildFrame), // 사용자 지정 MDI 자식 프레임입니다.
RUNTIME_CLASS(C [프로젝트명] View));
if (!pDocTemplate) return FALSE;
AddDocTemplate(pDocTemplate);

을 찾아서 아래에 그대로 복사한 뒤 아래와 같이 수정.

CMultiDocTemplate* pDocTemplateNewForm;
pDocTemplateNewForm = new CMultiDocTemplate(IDR_[프로젝트명]TYPE,
RUNTIME_CLASS(CNewFormDoc),
RUNTIME_CLASS(CChildFrame), // 사용자 지정 MDI 자식 프레임입니다.
RUNTIME_CLASS(CNewFormView ));
if (!pDocTemplateNewForm ) return FALSE;
AddDocTemplate(pDocTemplateNewForm );

3. 최초 뜨는 자식 Document 삭제

- 등록된 Template 가 2개 이상일 경우 최초 실행시 뜨는 Document 를 어떤 것을 열것인지 Popup으로 뜨게 된다.
- 2번 작업한 줄 아래 보면 아래와 같은 내용이 있는데, 모두 주석처리 하면 됨.

// 표준 셸 명령, DDE, 파일 열기에 대한 명령줄을 구문 분석합니다.
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

// 명령줄에 지정된 명령을 디스패치합니다.
// 응용 프로그램이 /RegServer, /Register, /Unregserver 또는 /Unregister로 시작된 경우 FALSE를 반환합니다.
if (!ProcessShellCommand(cmdInfo)) return FALSE;

4. 자식 Template 여는 방법

- 아래의 Code에서 for 문의 숫자 부분만 수정하면 된다.

- 몇번째로 등록한 Template 인지 그 숫자를 적어주면 된다.

 POSITION pos = GetFirstDocTemplatePosition();
 CDocTemplate* pTemplate;
 for (int i = 0; i < 2; i++) pTemplate = GetNextDocTemplate(pos);
 pTemplate->OpenDocumentFile(NULL);




- 간단하게 위의 내용을 실행하는 함수에 int 하나를 parameter로 받아서 처리하면 편리할 것이다.

댓글 없음:

댓글 쓰기