Uložení standardního dokumentu
Prostředí zpracovává příkazy Uložit, Uložit jako a Uložit vše. Když uživatel vybere možnost Uložit, Uložit jako nebo Uložit vše z nabídky Soubor nebo zavře řešení, výsledkem bude uložit vše následující proces.
Zpracování příkazů Uložit, Uložit jako a Uložit vše pro standardní editor
Tento proces je podrobně popsaný v následujících krocích:
Když jsou vybrány příkazy Uložit a Uložit jako, prostředí pomocí SVsShellMonitorSelection služby určí okno aktivního dokumentu a tím i položky, které se mají uložit. Jakmile je okno aktivního dokumentu známé, prostředí najde ukazatel hierarchie a identifikátor položky (itemID) dokumentu ve spuštěné tabulce dokumentu. Další informace naleznete v tématu Spuštění tabulky dokumentů.
Když je vybrán příkaz Uložit vše, prostředí použije informace ve spuštěné tabulce dokumentů ke kompilaci seznamu všech položek k uložení.
Když řešení přijme QueryStatus volání, iteruje se sadou vybraných položek (to znamená více výběrů vystavených službou SVsShellMonitorSelection ).
U každé položky ve výběru řešení používá ukazatel hierarchie k volání IsItemDirty metody k určení, zda má být povolen příkaz nabídky Uložit . Pokud jsou některé položky špinavé, je povolen příkaz Uložit . Pokud hierarchie používá standardní editor, pak hierarchie deleguje dotazování na zašpiněný stav editoru voláním IsDocDataDirty metody.
U každé položky, která je zašpiněná, použije řešení ukazatel hierarchie k volání SaveItem metody v příslušných hierarchiích.
Pro hierarchii je běžné, že k úpravě dokumentu použijete standardní editor. V tomto případě by datový objekt dokumentu pro tento editor měl podporovat IVsPersistDocData2 rozhraní. Při přijetí SaveItem volání metody by projekt měl informovat editor, že dokument je uložen voláním SaveDocData metody do datového objektu dokumentu. Editor může prostředí povolit zpracování dialogového okna Uložit jako voláním
Query Service
SVsUIShell rozhraní. Tím se vrátí ukazatel na IVsUIShell rozhraní. Editor pak musí volat metodu SaveDocDataToFile a předat ukazatel na implementaci editoru IPersistFileFormat pomocí parametrupPersistFile
. Prostředí pak provede operaci Uložit a poskytne dialogové okno Uložit jako pro editor. Prostředí pak volá zpět do editoru pomocí IPersistFileFormat.Pokud se uživatel pokouší uložit dokument bez názvu (tj. dříve neuloženého dokumentu), pak se ve skutečnosti provede příkaz Uložit jako.
V případě příkazu Uložit jako zobrazí prostředí dialogové okno Uložit jako a vyzve uživatele k zadání názvu souboru.
Pokud došlo ke změně názvu souboru, je hierarchie zodpovědná za aktualizaci informací v mezipaměti rámce dokumentu voláním SetProperty(VSFPROPID_MkDocument).
Pokud příkaz Uložit jako přesune umístění dokumentu a hierarchie je citlivá na umístění dokumentu, je hierarchie zodpovědná za předání vlastnictví otevřeného okna dokumentu do jiné hierarchie. K tomu dochází například v případě, že projekt sleduje, jestli je soubor interním nebo externím souborem (Různé soubory) ve vztahu k projektu. Pomocí následujícího postupu můžete změnit vlastnictví souboru na projekt Různé soubory.
Změna vlastnictví souboru
Změna vlastnictví souboru na projekt Různé soubory
Query Service for the SVsExternalFilesManager interface.
Vrátí se ukazatel na IVsExternalFilesManager2 .
TransferDocument Volání metody (
pszMkDocumentNew
,punkWindowFrame
) pro přenos dokumentu do nové hierarchie. Hierarchie provádějící příkaz Uložit jako volá tuto metodu.