환경은 저장, 다른 이름으로 저장 및 모두 저장 명령을 처리합니다. 사용자가 파일 메뉴에서 저장, 다른 이름으로 저장 또는 모두 저장을 선택하거나 솔루션을 닫으면 모두 저장이 수행됩니다.
표준 편집기의 명령 처리: 저장, 다른 이름으로 저장, 모두 저장
이 프로세스는 다음 단계에 자세히 설명되어 있습니다.
저장 및 다른 이름으로 저장 명령을 선택하면, 환경에서는 SVsShellMonitorSelection 서비스를 이용하여 활성 문서 창을 결정하고 따라서 어떤 항목을 저장해야 하는지를 결정합니다. 현재 문서 창이 알려지면 환경은 실행 중인 문서 테이블의 문서에 대한 계층 구조 포인터 및 itemID(항목 식별자)를 찾습니다. 자세한 내용은 문서 테이블 실행을 참조하세요.
모두 저장 명령을 선택하면 환경은 실행 중인 문서 테이블의 정보를 사용하여 저장할 모든 항목의 목록을 컴파일합니다.
솔루션이 호출을 QueryStatus 받으면 선택한 항목 집합(즉, 서비스에서 노출하는 SVsShellMonitorSelection 여러 선택 항목)을 반복합니다.
선택 영역의 각 항목에서 솔루션은 계층 구조 포인터를 사용하여 메서드를 호출 IsItemDirty 하여 저장 메뉴 명령을 사용할지 여부를 결정합니다. 하나 이상의 항목이 더티인 경우 저장 명령이 사용하도록 설정됩니다. 표준 편집기를 사용하는 경우, 계층은 IsDocDataDirty 메서드를 호출하여 수정 여부 상태에 대한 쿼리를 편집기에 위임합니다.
선택한 각 변경된 항목에 대해, 솔루션은 계층 포인터를 사용하여 적절한 계층의 SaveItem 메서드를 호출합니다.
계층 구조에서 표준 편집기를 사용하여 문서를 편집하는 것이 일반적입니다. 이 경우 해당 편집기에서 문서 데이터 개체가 인터페이스를 IVsPersistDocData2 지원해야 합니다. 메서드 호출을 SaveItem 받으면 프로젝트는 문서 데이터 개체에서 메서드를 호출 SaveDocData 하여 문서가 저장되고 있음을 편집기에게 알려야 합니다. 편집기는 환경이 SVsUIShell 대화 상자를 처리하도록
Query Service인터페이스를 호출하여 허용할 수 있습니다. 이 코드는 IVsUIShell 인터페이스에 대한 포인터를 반환합니다. 그런 다음 편집기가pPersistFile매개변수를 통해 편집기의 IPersistFileFormat 구현에 대한 포인터를 전달하여 SaveDocDataToFile 메서드를 호출해야 합니다. 그런 다음, 환경은 저장 작업을 수행하고 편집기용 다른 이름으로 저장 대화 상자를 제공합니다. 그런 다음 환경은 IPersistFileFormat 구문을 사용하여 편집기로 다시 호출합니다.사용자가 제목 없는 문서(즉, 이전에 저장되지 않은 문서)를 저장하려고 하면 다른 이름으로 저장 명령이 실제로 수행됩니다.
다른 이름으로 저장 명령을 사용하면, 환경은 파일 이름을 입력하라는 메시지가 표시되는 다른 이름으로 저장 대화 상자를 표시합니다.
파일 이름이 변경된 경우 계층 구조는 호출 SetProperty(VSFPROPID_MkDocument)을 통해 문서 프레임의 캐시된 정보를 업데이트합니다.
다른 이름으로 저장 명령이 문서의 위치를 이동하고 계층 구조가 문서 위치에 중요한 경우 계층 구조는 열려 있는 문서 창의 소유권을 다른 계층으로 넘겨야 합니다. 예를 들어 프로젝트가 프로젝트와 관련하여 파일이 내부 또는 외부 파일(기타 파일)인지 여부를 추적하는 경우에 발생합니다. 다음 절차에 따라 파일의 소유권을 기타 파일 프로젝트로 변경합니다.
파일 소유권 변경
파일 소유권을 기타 파일 프로젝트로 변경하려면
SVsExternalFilesManager 인터페이스에 대한 쿼리 서비스를 제공합니다.
IVsExternalFilesManager2에 대한 포인터가 반환됩니다.
TransferDocument (
pszMkDocumentNew,punkWindowFrame) 메서드를 호출하여 문서를 새 계층으로 전송합니다. 다른 이름으로 저장 명령을 수행하는 계층 구조에서 이 메서드를 호출합니다.