다음을 통해 공유


표준 문서 저장

환경에서는 저장, 다른 이름으로 저장 및 모두 저장 명령을 처리합니다. 사용자가 파일 메뉴에서 저장, 다른 이름으로 저장 또는 모두 저장을 선택하거나 솔루션을 닫으면 모두 저장이 수행됩니다.

Standard Editor 표준 편집기에 대한 Save, Save As, Save All 명령 처리

이 프로세스는 다음 단계에 자세히 설명되어 있습니다.

  1. 저장다른 이름으로 저장 명령을 선택하면 환경은 SVsShellMonitorSelection 서비스를 사용하여 활성 문서 창과 저장해야 하는 항목을 결정합니다. 활성 문서 창이 알려지면 환경은 실행 중인 문서 테이블에서 문서의 계층 구조 포인터와 itemID(항목 식별자)를 찾습니다. 자세한 내용은 문서 테이블 실행을 참조하세요.

    모두 저장 명령을 선택하면 환경은 실행 중인 문서 테이블의 정보를 사용하여 저장할 모든 항목의 목록을 컴파일합니다.

  2. 솔루션이 QueryStatus 호출을 받으면 선택한 항목 집합(즉, SVsShellMonitorSelection 서비스에서 노출하는 여러 선택 항목)을 반복합니다.

  3. 선택 영역의 각 항목에서 솔루션은 계층 구조 포인터를 사용하여 IsItemDirty 메서드를 호출해 저장 메뉴 명령을 사용할지 여부를 결정합니다. 항목 하나 이상이 더티인 경우 저장 명령을 사용합니다. 계층에서 표준 편집기를 사용하는 경우 계층 구조는 IsDocDataDirty 메서드를 호출하여 더티 상태에 대한 쿼리를 편집기로 위임합니다.

  4. 더티인 선택한 각 항목에서 솔루션은 계층 포인터를 사용하여 적절한 계층에서 SaveItem 메서드를 호출합니다.

    계층 구조에서 표준 편집기를 사용하여 문서를 편집하는 것이 일반적입니다. 이 경우 해당 편집기용 문서 데이터 개체에서 IVsPersistDocData2 인터페이스를 지원해야 합니다. SaveItem 메서드 호출을 받으면 프로젝트는 문서 데이터 개체에서 SaveDocData 메서드를 호출하여 문서가 저장되고 있음을 편집기에게 알려야 합니다. 편집기를 사용하면 환경은 SVsUIShell 인터페이스에 Query Service를 호출하여 다른 이름으로 저장 대화 상자를 처리합니다. 그러면 IVsUIShell 인터페이스에 대한 포인터가 반환됩니다. 그런 다음, 편집기에서 SaveDocDataToFile 메서드를 호출하여 pPersistFile 매개 변수를 통해 편집기의 IPersistFileFormat 구현에 대한 포인터를 전달해야 합니다. 그런 다음, 환경은 저장 작업을 수행하고 편집기의 다른 이름으로 저장 대화 상자를 제공합니다. 그런 다음, 환경에서 IPersistFileFormat을 사용하여 편집기를 다시 호출합니다.

  5. 사용자가 제목 없는 문서(즉, 이전에 저장되지 않은 문서)를 저장하려고 하면 실제로는 다른 이름으로 저장 명령이 수행됩니다.

  6. 다른 이름으로 저장 명령의 경우 환경에 다른 이름으로 저장 대화 상자가 표시되어 사용자에게 파일 이름을 묻는 메시지가 표시됩니다.

    파일 이름이 변경된 경우 계층 구조는 SetProperty(VSFPROPID_MkDocument) 호출을 통해 문서 프레임의 캐시된 정보를 업데이트해야 합니다.

    다른 이름으로 저장 명령이 문서 위치를 이동하고 계층 구조가 문서 위치에 중요한 경우 계층 구조는 열려 있는 문서 창의 소유권을 다른 계층 구조로 전달해야 합니다. 예를 들어 프로젝트가 프로젝트와 관련하여 파일이 내부 또는 외부 파일(기타 파일)인지 여부를 추적하는 경우에 발생합니다. 다음 절차를 수행하여 파일 소유권을 기타 파일 프로젝트로 변경합니다.

파일 소유권 변경

파일 소유권을 기타 파일 프로젝트로 변경하기

  1. SVsExternalFilesManager 인터페이스의 쿼리 서비스입니다.

    IVsExternalFilesManager2에 대한 포인터가 반환됩니다.

  2. TransferDocument(pszMkDocumentNew, punkWindowFrame) 메서드를 호출하여 문서를 새 계층 구조로 전송합니다. 다른 이름으로 저장 명령을 수행하는 계층 구조에서 이 메서드를 호출합니다.