HOWTO: MFC 문서 형식 당 2 지원 파일 확장명 방법

기술 자료 번역 기술 자료 번역
기술 자료: 141921 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

Microsoft 기반 클래스 (MFC) 문서 또는 아키텍처 각 문서 형식과 관련된 많아야 한 파일 확장명이 보기를 사용하여 빌드된 응용 프로그램. 이 기본 파일 확장명은 지정하지 않으면 문자열 테이블에 저장된 문서 템플릿 문자열이 저장됩니다.

두 개의 파일 확장명을 사용하여 주어진된 문서 형식과 연결하려면 유용한 경우가 많습니다. 이 문서에서는 사용하여 두 개의 파일 확장명을 문서 템플릿 문자열 저장할 수 있도록 하는 방법을 설명합니다. 클래스 파생 및 함수 재정의를 통해 문서 서식 파일을 사용하여 두 파일 확장명에 연결할 수 있습니다.

추가 정보

단계별 프로시저

SDI 또는 MDI 응용 프로그램에서 하나의 문서 형식과 두 개의 파일 확장명을 연결하려면 다음 단계를 사용하십시오.

  1. 두 개의 파일 확장명을 포함하는 문자열 테이블 엔트리를 수정하십시오. 두 개의 확장명은 세미콜론 (예를 들어, .aaa, .bbb) 으로 구분하여 filterExt 필드에 입력됩니다. 문서 템플릿 문자열 다음과 비슷하게 표시될 수 있습니다:
       \nExts\nExts\nFiles (*.aaa; *.bbb)\n.aaa;.bbb\nExts.Doc\nExts Doc.
    					
  2. 클래스를 CMultiDocTemplate에서 SDI 응용 프로그램은 MDI 응용 프로그램 또는 CSingleDocTemplate 파생시킵니다. 이 클래스는 프로젝트에 추가하고 사용자의 InitInstance 문서 템플릿을 만들 때 사용할 함수를. 단순히 기본 클래스 생성자를 호출하는 생성자를 만들어야 합니다.
       CMyMultiDocTemplate::CMyMultiDocTemplate(
          UINT nIDResource, CRuntimeClass* pDocClass,
          CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass ) :
          CMultiDocTemplate(nIDResource, pDocClass, pFrameClass, pViewClass)
          { };
    					
  3. 2단계에서 CMultiDocTemplate 또는 CSingleDocTemplate에서 파생된 클래스에 GetDocString 함수를 재정의합니다.
       BOOL CMyMultiDocTemplate::GetDocString(CString& rString,
                                enum DocStringIndex i) const
       {
            CString strTemp,strLeft,strRight;
            int nFindPos;
            AfxExtractSubString(strTemp, m_strDocStrings, (int)i);
    
            if(i == CDocTemplate::filterExt)  {
              nFindPos=strTemp.Find(';');
              if(-1 != nFindPos) {
                //string contains two extensions
                strLeft=strTemp.Left(nFindPos+1);
                strRight=strTemp.Right(lstrlen((const
                char*)strTemp)-nFindPos-1);
                strTemp=strLeft+strRight;
              }
            }
        rString = strTemp;
        return TRUE;
       }
    					
  4. 파일을 열 때 두 파일 확장명을 인식할 수 있도록 CMyMultiDocTemplate::MatchDocType 재정의할.
       CDocTemplate::Confidence CMyMultiDocTemplate::MatchDocType(const
            char* pszPathName, CDocument*& rpDocMatch)
       {
            ASSERT(pszPathName != NULL);
            rpDocMatch = NULL;
    
            // go through all documents
            POSITION pos = GetFirstDocPosition();
            while (pos != NULL)
            {
               CDocument* pDoc = GetNextDoc(pos);
               if (pDoc->GetPathName() == pszPathName) {
                  // already open
                  rpDocMatch = pDoc;
                  return yesAlreadyOpen;
               }
            }  // end while
    
            // see if it matches either suffix
            CString strFilterExt;
            if (GetDocString(strFilterExt, CDocTemplate::filterExt) &&
              !strFilterExt.IsEmpty())
            {
               // see if extension matches
               ASSERT(strFilterExt[0] == '.');
               CString ext1,ext2;
               int nDot = CString(pszPathName).ReverseFind('.');
               const char* pszDot = nDot < 0 ? NULL : pszPathName + nDot;
    
               int nSemi = strFilterExt.Find(';');
               if(-1 != nSemi)   {
                 // string contains two extensions
                 ext1=strFilterExt.Left(nSemi);
                 ext2=strFilterExt.Mid(nSemi+2);
                 // check for a match against either extension
                 if (nDot >= 0 && (lstrcmpi(pszPathName+nDot, ext1) == 0
                     || lstrcmpi(pszPathName+nDot,ext2) ==0))
                   return yesAttemptNative; // extension matches
               }
               else
               { // string contains a single extension
                 if (nDot >= 0 && (lstrcmpi(pszPathName+nDot,
                     strFilterExt)==0))
                 return yesAttemptNative;  // extension matches
               }
            }
            return yesAttemptForeign; //unknown document type
       }
    					
  5. 저장 및 이름으로 함수를 제대로 저장, 해당 DoSave 재정의할 수 있도록 CDocument 파생된 클래스의 함수를. 잘라내기 및 붙여넣기 MFC에서 Mfc\Src\Doccore.cpp CDocument::DoSave() 구현은 파생 클래스로.

    이러한 줄 바꾸기:
            // append the default suffix if there is one
            CString strExt;
            if (pTemplate->GetDocString(strExt, CDocTemplate::filterExt) &&
                !strExt.IsEmpty())
            {
               ASSERT(strExt[0] == '.');
               newName += strExt;
            }
    						
    이러한 줄:
            // append the default suffix if there is one
            CString strExt;
            if (pTemplate->GetDocString(strExt, CDocTemplate::filterExt) &&
                !strExt.IsEmpty())
            {
              ASSERT(strExt[0] == '.');
    
              int nSemi;                       //added
              if(nSemi = strExt.Find(';'));    //added
              strExt = strExt.Left(nSemi);     //added
    
              newName += strExt;
            }
    						
    있는 세 줄의 코드로 저장 문서 문자열에 지정된 두 개의 확장이 없는 문서 형식을 처리할 때 기본적으로 첫 번째 확장 반환 추가된. 파일이 문서 문자열에 지정된 두 번째 확장명으로 저장한 경우 사용자가 이 확장을 통해 입력해야 합니다.

    다음 코드 줄을 바꿀 필요가:
          CATCH_ALL(e)
          {
          TRACE0("Warning: failed to delete file after failed SaveAs.\n");
          DELETE_EXCEPTION(e);
          }
    						
    함께:
          CATCH_ALL(e)
          {
          TRACE0("Warning: failed to delete file after failed SaveAs.\n");
          e->Delete();     //modified
          }
    						
    DELETE_EXCEPTION() 매크로 이 컨텍스트에서 정의되지 않은 때문에 필요한 입니다.
  6. (16 비트 버전 전용) 클래스 마법사 파생된 문서 클래스의 OnFileSave 및 OnFileSaveAs 명령 처리기를 제공할 수 있습니다. 이 필요합니다 때문에 Visual C++를 사용하여 DoSave 16비트 버전의 함수를 가상 수 없습니다. 단순히 잘라내어 명령 처리기를 Mfc\Src\Doccore.cpp 두 함수에서 기본 클래스 버전의 내용을 붙여넣습니다. 기본 클래스 버전이 아닌 DoSave 로컬 복사본을 결과 함수를 호출합니다. # 추가하는 데 필요할 수 있습니다 "io.h" _access 함수에 대한 정의가 제공하기 위해 프로젝트에 포함됩니다.

참조

Microsoft 기술 자료의 다음 문서를 참조하십시오.
198538DocMgrEx.exe Assoc 다중 파일 확장명 w/1 문서 유형

속성

기술 자료: 141921 - 마지막 검토: 2006년 12월 7일 목요일 - 수정: 5.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Foundation Class Library 4.2?을(를) 다음과 함께 사용했을 때
    • Microsoft Visual C++ 1.0 Professional Edition
    • Microsoft Visual C++ 1.5 Professional Edition
    • Microsoft Visual C++ 1.51
    • Microsoft Visual C++ 1.52 Professional Edition
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 2.2
    • Microsoft Visual C++ 4.0 Standard Edition
키워드:?
kbmt kbdocview kbhowto KB141921 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com