[MFC] 확장자에 따라 다른 도큐먼트 생성하기

일단 MDI 상에서 서로 다른 doc/view 를 만들었다는 가정을 하면 일단 각각의 셋을 CMultiDocTemplate로 추가하는 과정이 있을 태고 이것은 컴파일 시점에서 어떤 doc/view 는 몇번째 MultiDocTemplate 라는 것이 결정이 된다.

그럼 CWinApp 를 상속받은 클래스의 OpenDocumentFile 를 오버라이드 해서 인자로 넘어온 파일이름의 확장자를 검사하고 원하는 CMultiDocTemplate를 얻어서 OpenDocumentFile 를 호출해 주면 된다.

코드로 보면

[CODE]CDocument* CWaferMapApp::OpenDocumentFile(LPCTSTR lpszFileName)
{
CString szFilename = lpszFileName;
if( szFilename.Right(3).MakeUpper() == "DWF" )
{
POSITION pos = m_pDocManager->GetFirstDocTemplatePosition();
m_pDocManager->GetNextDocTemplate( pos );
CDocTemplate* pDocTmplate = m_pDocManager->GetNextDocTemplate( pos );
CDocument* pDocument = pDocTmplate->OpenDocumentFile( lpszFileName, TRUE );

return pDocument;
}

return __super::OpenDocumentFile(lpszFileName);
}[/CODE]

이런 느낌. 이경우는 DWF 라는 확장자의 경우 두번째 doc/view 셋을 생성하고 싶었기 때문에 m_pDocManager-GetNextDocTemplate( pos ); 의 호출이 두번 이루어진다.

일반적으로 파일열기를 해서 아무 확장자나 가지고 있는 파일을 열면 첫번째 doc/view 를 생성하는것 같다.

음…. 근데 이렇게 무식한 방법 말고 좀더 좋은 방법이 있을것 같은데…

ps. 쩝 코드 색깔 입히는거 없나 -_-;

“[MFC] 확장자에 따라 다른 도큐먼트 생성하기”에 대한 4개의 댓글

  1. 이미 생성된 document 안에서 다른 document를 만드는건 낭비자나.
    그러니까 1. 직접 winapp의 onfileopen을 새로구현 하던가,
    아니면 2. winapp에서 각각의 view/doc template를 따로따로 만들어서 AddDocTemplate 해주면 생성시에 구분되어 생성되지.

  2. 도큐먼트에서 다른 도큐먼트를 만드는 코드는 없삼.

    나도 2번이 궁금해.. 그니깐 어떻게 구분 하냐고 -_-;
    참고로 이미 SMF 라는 확장자를 스트링테이블리소스(AddDocTemplate에 인자로 들어가는) 에 넣어둬서 SMF 파일은 두번째 탬플릿으로 잘 열려. 문제는 DWF 라는 확장자도 두번째 탬플릿으로 열고 싶다는 거지.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다