본문 바로가기

Coding Note

[MFC] MDI tab에 다른 기능의 자식 추가

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