共用方式為


儲存標準檔

環境會處理 [儲存]、[另存新檔] 和 [全部儲存] 命令。 當使用者從 [檔案] 功能表中選取 [儲存]、[另存新檔][全部另存] 或關閉解決方案,導致 [全部儲存] 時,會發生下列程序。

標準編輯器

標準編輯器的「儲存」、「另存新檔」和「全部儲存」命令處理

此過程在以下步驟中詳細說明:

  1. 選取「 儲存」 和「 另存新檔 」指令時,環境會使用該 SVsShellMonitorSelection 服務來決定作用中的文件視窗,從而決定應儲存哪些項目。 知道作用中文件視窗之後,環境會在執行中的文件表格中尋找文件的階層指標和專案識別碼 (itemID)。 如需詳細資訊,請參閱 執行文件表格

    選取「 全部儲存」 指令時,環境會使用執行中文件表格中的資訊來編譯要儲存的所有項目清單。

  2. 當解決方案收到 QueryStatus 呼叫時,它會遍歷已選取的項目集(即由 SVsShellMonitorSelection 服務公開的多個選取項目)。

  3. 在選取範圍中的每個專案上,解決方案會使用階層指標來呼叫 IsItemDirty 方法,以判斷是否應該啟用 [儲存] 功能表命令。 如果一或多個項目是髒的,則會啟用 儲存 命令。 如果階層使用標準編輯器,則階層會藉由呼叫 IsDocDataDirty 方法,將檢查變更狀態的工作委派給編輯器。

  4. 在每個標記為髒的選取項目上,解決方案會使用階層指標在適當的階層上呼叫 SaveItem 方法。

    階層通常使用標準編輯器來編輯文件。 在此情況下,該編輯器的文件資料物件應該支援介面 IVsPersistDocData2 。 收到 SaveItem 方法呼叫時,專案應該透過呼叫 SaveDocData 文件資料物件上的方法來通知編輯者正在儲存文件。 編輯器可以呼叫Query Service以允許環境處理SVsUIShell對話方塊的介面。 這會傳回 IVsUIShell 介面的指標。 然後,編輯器必須呼叫該SaveDocDataToFile方法,並以pPersistFile參數傳遞一個指向編輯器IPersistFileFormat實作的指標。 然後,環境會執行「儲存」作業,並為編輯器提供「 另存新檔」 對話框。 然後,環境會使用 IPersistFileFormat呼叫編輯器。

  5. 如果使用者嘗試儲存未命名的文件 (亦即先前未儲存的文件) ,則實際上會執行「另存新檔」指令。

  6. 對於「另存新檔」指令,環境會顯示「另存新檔」對話方塊,提示使用者輸入檔名。

    如果檔案名稱已變更,則階層會負責呼叫 SetProperty(VSFPROPID_MkDocument) 來更新文件框架的快取資訊。

    如果 「另存新檔」 指令移動文件的位置,且階層對文件位置敏感,則階層會負責將開啟的文件視窗的所有權移交給另一個階層。 例如,如果專案追蹤檔案是與專案相關的內部檔案還是外部檔案 (雜項檔案),就會發生這種情況。 使用下列程序將檔案的擁有權變更為「其他檔案」專案。

變更檔案擁有權

若要將檔案擁有權變更至「雜項檔案」專案

  1. SVsExternalFilesManager 介面的查詢服務。

    傳回一個指向IVsExternalFilesManager2的指標。

  2. 呼叫 TransferDocumentpszMkDocumentNewpunkWindowFrame) 方法,將文件傳輸至新的階層。 執行「另存新檔」命令的階層會呼叫這個方法。