add class위자드로부터...
CFrameWnd 를 기본클래스로 하는 COtherChildFrm 새성
CFormView 를 기본클래스로 하는 COtherChildView 생성
CDocument 를 기본클래스로 하는 COtherChildDoc 생성
후 C[프로젝트명]App 클래스 의 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);
다음에
pDocTemplate = NULL;
pDocTemplate = new CMultiDocTemplate(IDR_ [프로젝트명] TYPE,
RUNTIME_CLASS(COtherChildDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(COtherChildView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
를 추가해준다. (굵은 표시 부분 주의)
그 후 메뉴 이벤트 등을 통해서 해당 자식도큐먼트를 호출하는데,
ex]
~::OnOtherChild(){
POSITION pos = GetFirstDocTemplatePosition();
CDocTemplate* pTemp;
for(unsigned i=0; i< RegiNumber; i++)
pTemp = GetNextDocTemplate(pos);
pTemp->OpenDocumentFile(NULL);
}
위와같이 호출하게되면 메인 컨테이너에 다른기능을 가지는 자식도큐먼트를 생성할 수 있다.
여기서 GetFirstDocTemplatePosition() 은 맨 처음 자식도큐먼트의 앞 템플릿(헤더같은) 이므로
첫번째 자식도큐먼트를 생성하는 코드라면 RegiNumber 는 1이되어야 한다.
그런데 이렇게하면 프로그램을 처음 실행했을 때 어떤 자식도큐먼트를 생성할지 묻는 창이 나타난다.
안보이게 하려면
// 표준 셸 명령, DDE, 파일 열기에 대한 명령줄을 구문 분석합니다.
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// 명령줄에 지정된 명령을 디스패치합니다.
// 응용 프로그램이 /RegServer, /Register, /Unregserver 또는 /Unregister로 시작된 경우 FALSE를 반환합니다.
if (!ProcessShellCommand(cmdInfo))
return FALSE;
이 부분을 주석처리하면 된다.
'Coding Note' 카테고리의 다른 글
[MFC] CDockablePane에 CFormView 올리기 (1) | 2012.09.27 |
---|---|
[winAPI] win32 i/o cancellation (0) | 2012.08.07 |
[C++] 다차원 배열 파라미터 (0) | 2012.06.12 |
[C++] C++ callback and delegate (0) | 2012.05.27 |
[Data Structure] Red Black Tree (0) | 2012.05.27 |