Zapisywanie standardowego dokumentu
Środowisko obsługuje polecenia Zapisz, Zapisz jako i Zapisz wszystkie. Gdy użytkownik wybierze pozycję Zapisz, Zapisz jako lub Zapisz wszystko z menu Plik lub zamknie rozwiązanie, co spowoduje zapisanie wszystkich, zostanie wyświetlony następujący proces.
Obsługa poleceń Zapisz, Zapisz jako i Zapisz wszystko dla standardowego edytora
Ten proces został szczegółowo opisany w następujących krokach:
Po wybraniu poleceń Zapisz i Zapisz jako środowisko używa SVsShellMonitorSelection usługi do określenia aktywnego okna dokumentu, a tym samym elementów, które należy zapisać. Gdy aktywne okno dokumentu jest znane, środowisko znajduje wskaźnik hierarchii i identyfikator elementu (itemID) dla dokumentu w uruchomionej tabeli dokumentów. Aby uzyskać więcej informacji, zobacz Running Document Table (Uruchamianie tabeli dokumentów).
Po wybraniu polecenia Zapisz wszystko środowisko używa informacji w uruchomionej tabeli dokumentów do skompilowania listy wszystkich elementów do zapisania.
Gdy rozwiązanie odbiera QueryStatus wywołanie, wykonuje iterację po zestawie wybranych elementów (czyli wielu wyborach uwidocznionych przez usługę SVsShellMonitorSelection ).
W każdym elemencie zaznaczenia rozwiązanie używa wskaźnika hierarchii, aby wywołać metodę IsItemDirty w celu określenia, czy należy włączyć polecenie Zapisz menu. Jeśli co najmniej jeden element jest zanieczyszczony, polecenie Zapisz jest włączone. Jeśli hierarchia używa standardowego edytora, hierarchia deleguje wykonywanie zapytań o stan zanieczyszczony do edytora przez wywołanie IsDocDataDirty metody .
W przypadku każdego zaznaczonego elementu, który jest zanieczyszczony, rozwiązanie używa wskaźnika hierarchii do wywołania SaveItem metody w odpowiednich hierarchiach.
Hierarchia często używa standardowego edytora do edytowania dokumentu. W takim przypadku obiekt danych dokumentu dla tego edytora IVsPersistDocData2 powinien obsługiwać interfejs. Po otrzymaniu wywołania SaveItem metody projekt powinien poinformować edytor, że dokument jest zapisywany przez wywołanie SaveDocData metody w obiekcie danych dokumentu. Edytor może zezwolić środowisku na obsługę okna dialogowego Zapisz jako , wywołując
Query Service
SVsUIShell interfejs. Spowoduje to zwrócenie wskaźnika do interfejsu IVsUIShell . Następnie edytor musi wywołać metodę SaveDocDataToFile , przekazując wskaźnik do implementacji edytora IPersistFileFormat za pomocą parametrupPersistFile
. Następnie środowisko wykonuje operację Zapisz i udostępnia okno dialogowe Zapisz jako dla edytora. Następnie środowisko wywołuje polecenie z powrotem do edytora za pomocą polecenia IPersistFileFormat.Jeśli użytkownik próbuje zapisać niezapisany dokument (tj. wcześniej niezapisany dokument), wykonywane jest polecenie Zapisz jako.
W przypadku polecenia Zapisz jako środowisko wyświetla okno dialogowe Zapisz jako, wyświetlając użytkownikowi monit o podanie nazwy pliku.
Jeśli nazwa pliku uległa zmianie, hierarchia jest odpowiedzialna za aktualizowanie buforowanych informacji ramki dokumentu przez wywołanie metody SetProperty(VSFPROPID_MkDocument).
Jeśli polecenie Zapisz jako przenosi lokalizację dokumentu, a hierarchia jest wrażliwa na lokalizację dokumentu, hierarchia jest odpowiedzialna za przekazanie własności otwartego okna dokumentu do innej hierarchii. Dzieje się tak na przykład, jeśli projekt śledzi, czy plik jest plikiem wewnętrznym, czy zewnętrznym (plik inny) w odniesieniu do projektu. Poniższa procedura umożliwia zmianę własności pliku na projekt Różne pliki.
Zmiana własności pliku
Aby zmienić własność pliku na projekt Różne pliki
Usługa zapytań dla interfejsu SVsExternalFilesManager .
Zwracany jest wskaźnik IVsExternalFilesManager2 .
Wywołaj metodę TransferDocument (
pszMkDocumentNew
,punkWindowFrame
), aby przenieść dokument do nowej hierarchii. Hierarchia wykonująca polecenie Zapisz jako wywołuje tę metodę.