Udostępnij za pośrednictwem


Uruchamianie tabeli dokumentu

Środowisko IDE utrzymuje listę wszystkich aktualnie otwartych dokumentów w wewnętrznej strukturze nazywanej uruchomioną tabelą dokumentów (RDT). Ta lista zawiera wszystkie otwarte dokumenty w pamięci, niezależnie od tego, czy te dokumenty są obecnie edytowane. Dokument to dowolny element, który jest utrwalany, w tym pliki w projekcie lub głównym pliku projektu (na przykład plik vcxproj).

Elementy uruchomionej tabeli dokumentów

Uruchomiona tabela dokumentów zawiera następujące wpisy.

Element opis
Dokument moniker Ciąg, który jednoznacznie identyfikuje obiekt danych dokumentu. Będzie to bezwzględna ścieżka pliku dla systemu projektu, który zarządza plikami (na przykład C:\MyProject\MyFile). Ten ciąg jest również używany dla projektów zapisanych w magazynach innych niż systemy plików, takich jak procedury składowane w bazie danych. W takim przypadku system projektu może wymyślić unikatowy ciąg, który może rozpoznać i ewentualnie przeanalizować, aby określić sposób przechowywania dokumentu.
Właściciel hierarchii Obiekt hierarchii, który jest właścicielem IVsHierarchy dokumentu, reprezentowany przez interfejs.
Identyfikator pozycji Identyfikator elementu dla określonego elementu w hierarchii. Ta wartość jest unikatowa wśród wszystkich dokumentów w hierarchii, która jest właścicielem tego dokumentu, ale ta wartość nie gwarantuje unikatowości w różnych hierarchiach.
Obiekt danych dokumentu Co najmniej jest to IUnknown

Obiektu. Środowisko IDE nie wymaga żadnego określonego interfejsu IUnknown poza interfejsem dla obiektu danych dokumentu edytora niestandardowego. Jednak w przypadku edytora standardowego implementacja interfejsu IVsPersistDocData2 edytora jest wymagana do obsługi wywołań trwałości plików z projektu. Aby uzyskać więcej informacji, zobacz Zapisywanie standardowego dokumentu.
Flagi Flagi kontrolujące, czy dokument jest zapisywany, czy jest stosowany blokada odczytu lub edycji itd., można określić, gdy wpisy są dodawane do RDT. Aby uzyskać więcej informacji, zobacz _VSRDTFLAGS wyliczenie.
Edytuj liczbę blokad Liczba blokad edycji. Blokada edycji wskazuje, że niektóre edytory mają otwarty dokument do edycji. Gdy liczba blokad edycji przechodzi do zera, użytkownik zostanie poproszony o zapisanie dokumentu, jeśli został zmodyfikowany. Na przykład za każdym razem, gdy otworzysz dokument w edytorze za pomocą polecenia Nowe okno , zostanie dodana blokada edycji dla tego dokumentu w RDT. Aby można było ustawić blokadę edycji, dokument musi mieć identyfikator hierarchii lub elementu.
Liczba blokad odczytu Liczba blokad odczytu. Blokada odczytu wskazuje, że dokument jest odczytywany przez jakiś mechanizm, taki jak kreator. Blokada odczytu przechowuje dokument aktywny w RDT, wskazując jednocześnie, że nie można edytować dokumentu. Blokadę odczytu można ustawić nawet wtedy, gdy dokument nie ma identyfikatora hierarchii ani elementu. Ta funkcja umożliwia otwarcie dokumentu w pamięci i wprowadzenie go w RDT bez własności dokumentu przez dowolną hierarchię. Ta funkcja jest rzadko używana.
Uchwyt blokady Wystąpienie interfejsu IVsDocumentLockHolder . Blokada jest implementowana przez funkcje, takie jak kreatory, które otwierają i edytują dokumenty poza edytorem. Uchwyt blokady umożliwia funkcji dodawanie blokady edycji do dokumentu, aby zapobiec zamknięciu dokumentu, gdy jest on nadal edytowany. Zwykle blokady edycji są dodawane tylko przez okna dokumentów (czyli edytory).

Każdy wpis w RDT ma skojarzona unikatową hierarchię lub identyfikator elementu, który zazwyczaj odpowiada jednemu węzłowi w projekcie. Wszystkie dokumenty dostępne do edycji są zwykle własnością hierarchii. Wpisy wprowadzone w kontrolce RDT, który projekt lub — dokładniej — która hierarchia jest obecnie właścicielem edytowanego obiektu danych dokumentu. Korzystając z informacji w dokumencie RDT, środowisko IDE może uniemożliwić otwieranie dokumentu przez więcej niż jeden projekt jednocześnie.

Hierarchia kontroluje również trwałość danych i używa informacji w RDT do aktualizowania okien dialogowych Zapisz i Zapisz jako . Gdy użytkownicy modyfikują dokument, a następnie wybierają polecenie Zakończ z menu Plik , środowisko IDE wyświetla im okno dialogowe Zapisywanie zmian , aby wyświetlić wszystkie projekty i elementy projektu, które są obecnie modyfikowane. Dzięki temu użytkownicy mogą wybrać dokumenty do zapisania. Lista dokumentów do zapisania (czyli tych dokumentów, które mają zmiany) jest generowana na podstawie RDT. Wszystkie elementy, które powinny być widoczne w oknie dialogowym Zapisywanie zmian po wyjściu z aplikacji, powinny mieć rekordy w RDT. RDT koordynuje dokumenty zapisywane i czy użytkownik jest monitowany o operację zapisywania przy użyciu wartości określonych we wpisie Flags dla każdego dokumentu. Aby uzyskać więcej informacji na temat flag RDT, zobacz _VSRDTFLAGS wyliczenie.

Edytowanie blokad i blokad odczytu

Edytuj blokady i blokady odczytu znajdują się w RDT. Okno dokumentu zwiększa i dekrementuje blokadę edycji. W związku z tym, gdy użytkownik otworzy nowe okno dokumentu, liczba blokad edycji zwiększa się o jeden. Gdy liczba blokad edycji osiągnie zero, hierarchia jest sygnalizowana utrwalaniem lub zapisywaniem danych dla skojarzonego dokumentu. Hierarchia może następnie utrwalać dane w dowolny sposób, w tym utrwalać jako plik lub jako element w repozytorium. Możesz użyć LockDocument metody w interfejsie IVsRunningDocumentTable , aby dodać blokady edycji i blokady odczytu oraz metodę UnlockDocument usuwania tych blokad.

Zwykle po utworzeniu wystąpienia okna dokumentu dla edytora ramka okna automatycznie dodaje blokadę edycji dla dokumentu w RDT. Jeśli jednak utworzysz niestandardowy widok dokumentu, który nie używa standardowego okna dokumentu (czyli nie implementuje interfejsu IVsWindowFrame ), musisz ustawić własną blokadę edycji. Na przykład w kreatorze dokument jest edytowany bez otwierania w edytorze. Aby blokady dokumentów były otwierane przez kreatorów i podobne jednostki, te jednostki muszą zaimplementować IVsDocumentLockHolder interfejs. Aby zarejestrować uchwyt blokady dokumentu, wywołaj metodę RegisterDocumentLockHolder i przekaż implementację IVsDocumentLockHolder . Spowoduje to dodanie uchwytu blokady dokumentu do protokołu RDT. Innym scenariuszem implementacji uchwytu blokady dokumentu jest otwarcie dokumentu za pomocą specjalnego okna narzędzia. W tym przypadku nie można zamknąć dokumentu w oknie narzędzia. Jednak rejestrując się jako posiadacz blokady dokumentu w RDT, środowisko IDE może wywołać implementację CloseDocumentHolder metody w celu wyświetlenia monitu o zamknięcie dokumentu.

Inne zastosowania uruchomionej tabeli dokumentów

Inne jednostki w środowisku IDE używają protokołu RDT do uzyskiwania informacji o dokumentach. Na przykład menedżer kontroli źródła używa protokołu RDT, aby poinformować system o ponownym załadowaniu dokumentu w edytorze po uzyskaniu najnowszej wersji pliku. W tym celu menedżer kontroli źródła wyszukuje pliki w RDT, aby sprawdzić, czy którykolwiek z nich jest otwarty. Jeśli tak, menedżer kontroli źródła najpierw sprawdza, czy hierarchia implementuje metodę ReloadItem . Jeśli projekt nie implementuje ReloadItem metody, menedżer kontroli źródła sprawdza implementację ReloadDocData metody bezpośrednio w obiekcie danych dokumentu.

Środowisko IDE używa również protokołu RDT do ponownego dostosowania (przełącz do przodu) otwartego dokumentu, jeśli użytkownik zażąda tego dokumentu. Aby uzyskać więcej informacji, zobacz Wyświetlanie plików przy użyciu polecenia Otwórz plik. Aby określić, czy plik jest otwarty w RDT, wykonaj jedną z następujących czynności.

  • Wykonaj zapytanie dotyczące moniker dokumentu (czyli pełnej ścieżki dokumentu), aby dowiedzieć się, czy element jest otwarty.

  • Użyj hierarchii lub identyfikatora elementu, aby poprosić system projektu o pełną ścieżkę dokumentu, a następnie wyszukaj element w RDT.

Zobacz też