Udostępnij za pośrednictwem


Pola i interfejsy okna właściwości

Model wyboru w celu określenia, jakie informacje są wyświetlane w oknie Właściwości , jest oparty na oknie, które koncentruje się na środowisku IDE. Każde okno i obiekt w wybranym oknie mogą mieć obiekt kontekstu zaznaczenia wypychany do kontekstu zaznaczenia globalnego. Środowisko aktualizuje kontekst wyboru globalnego z wartościami z przedziału okna, gdy to okno ma fokus. Gdy fokus zmieni się, tak czy kontekst zaznaczenia.

Śledzenie zaznaczenia w środowisku IDE

Ramka okna lub witryna należąca do środowiska IDE ma usługę o nazwie STrackSelection. W poniższych krokach pokazano, jak zmiana zaznaczenia spowodowana zmianą fokusu przez użytkownika na inne otwarte okno lub wybranie innego elementu projektu w Eksplorator rozwiązań jest implementowana w celu zmiany zawartości wyświetlanej w oknie Właściwości.

  1. Obiekt utworzony przez pakiet VSPackage, który jest lokacjonowany w wybranych wywołaniach QueryService okna, aby wywołać STrackSelection metodę ITrackSelection.

  2. Kontener wyboru dostarczony przez wybrane okno tworzy własny ISelectionContainer obiekt. Po zmianie zaznaczenia pakiet VSPackage wywołuje funkcję OnSelectChange powiadamiania wszystkich odbiorników w środowisku, w tym okna Właściwości zmiany. Zapewnia również dostęp do informacji o hierarchii i elementach związanych z nowym wyborem.

  3. Wywołanie OnSelectChange i przekazanie go wybranym elementom hierarchii w parametrze VSHPROPID_BrowseObject spowoduje wypełnienie ISelectionContainer obiektu.

  4. Obiekt pochodzący z interfejsu IDispatch jest zwracany dla __VSHPROPID. VSHPROPID_BrowseObject dla żądanego elementu, a środowisko opakowuje go w element ISelectionContainer (zobacz następujący krok). Jeśli wywołanie zakończy się niepowodzeniem, środowisko wykonuje drugie wywołanie metody , IVsHierarchy::GetPropertyprzekazując kontener wyboru __VSHPROPID. VSHPROPID_SelContainer, że element hierarchii lub elementy są dostarczane.

    Pakiet VSPackage projektu nie jest tworzonyISelectionContainer, ponieważ pakiet VSPackage dostarczony przez środowisko implementuje go (na przykład Eksplorator rozwiązań) konstrukcji ISelectionContainer w jego imieniu.

  5. Środowisko wywołuje metody ISelectionContainer pobierania obiektów na podstawie interfejsu IDispatch w celu wypełnienia okna Właściwości .

    Po zmianie wartości w oknie Właściwości pakiet VSPackages implementuje IVsTrackSelectionEx::OnElementValueChangeEx i IVsTrackSelectionEx::OnSelectionChangeEx raportuje zmianę wartości elementu. Następnie środowisko wywołuje IVsUIShell lub IConnectionPointContainer zachowuje informacje wyświetlane w oknie Właściwości zsynchronizowane z wartościami właściwości. Aby uzyskać więcej informacji, zobacz Aktualizowanie wartości właściwości w oknie Właściwości.

    Oprócz wybrania innego elementu projektu w Eksplorator rozwiązań, aby wyświetlić właściwości powiązane z tym elementem, można również wybrać inny obiekt w oknie formularza lub dokumentu przy użyciu listy rozwijanej dostępnej w oknie Właściwości. Aby uzyskać więcej informacji, zobacz Lista obiektów okna właściwości.

    Możesz zmienić sposób wyświetlania informacji w siatce okna Właściwości z alfabetycznego na kategorialny, a jeśli jest dostępny, można również otworzyć stronę właściwości dla wybranego obiektu, klikając odpowiednie przyciski w oknie Właściwości . Aby uzyskać więcej informacji, zobacz Przyciski okna właściwości i strony właściwości.

    Na koniec w dolnej części okna Właściwości znajduje się również opis pola wybranego w siatce okna Właściwości . Aby uzyskać więcej informacji, zobacz Pobieranie opisów pól w oknie Właściwości.

Aktualizowanie wartości właściwości w oknie Właściwości

Istnieją dwa sposoby synchronizowania okna Właściwości ze zmianami wartości właściwości. Pierwszym z nich jest wywołanie interfejsu IVsUIShell , który zapewnia dostęp do podstawowych funkcji okien, w tym dostępu do narzędzi i okien dokumentów udostępnianych przez środowisko oraz tworzenia ich. W poniższych krokach opisano ten proces synchronizacji.

Aktualizowanie wartości właściwości przy użyciu programu IVsUIShell

Aby zaktualizować wartości właściwości przy użyciu interfejsu programu IVsUIShell

  1. Wywołaj IVsUIShell (za pośrednictwem SVsUIShell usługi) za każdym razem, gdy pakiety VSPackage, projekty lub edytory muszą tworzyć lub wyliczać narzędzia lub okna dokumentów.

  2. Zaimplementuj RefreshPropertyBrowser , aby okno Właściwości było zsynchronizowane ze zmianami właściwości dla projektu (lub dowolnego innego zaznaczonego obiektu przeglądanego przez okno Właściwości ) bez implementowania IConnectionPointContainer i wyzwalania OnChanged zdarzeń.

  3. Zaimplementuj IVsHierarchy metody AdviseHierarchyEvents oraz UnadviseHierarchyEvents odpowiednio ustanowić i wyłączyć powiadomienia klienta o zdarzeniach hierarchii bez konieczności implementowania IConnectionPointContainerhierarchii programu .

Aktualizowanie wartości właściwości przy użyciu funkcji I Połączenie ion

Drugim sposobem zachowania synchronizacji okna Właściwości ze zmianami wartości właściwości jest zaimplementowanie IConnection w obiekcie połączonym, aby wskazać istnienie interfejsów wychodzących. Jeśli chcesz zlokalizować nazwę właściwości, utwórz obiekt z ICustomTypeDescriptorklasy . Implementacja ICustomTypeDescriptor może modyfikować deskryptory właściwości zwracane i zmieniać nazwę właściwości. Aby zlokalizować opis, utwórz atrybut, który pochodzi z DescriptionAttribute i zastąpi właściwość Description.

Zagadnienia dotyczące implementowania interfejsu I Połączenie ion

  1. IConnection Zapewnia dostęp do obiektu podrzędnego modułu wyliczającego za pomocą interfejsu IEnumConnectionPoints . Zapewnia również dostęp do wszystkich obiektów podrzędnych punktu połączenia, z których każdy implementuje IConnectionPoint interfejs.

  2. Każdy obiekt przeglądania IPropertyNotifySink jest odpowiedzialny za zaimplementowanie zdarzenia. W oknie Właściwości zostanie wyświetlone polecenie dla zdarzenia ustawionego za pomocą polecenia IConnection.

  3. Punkt połączenia steruje liczbą połączeń (co najmniej jeden) dozwolonych w implementacji programu Advise. Punkt połączenia, który zezwala tylko na jeden interfejs, może wrócić E_NOTIMPL z EnumConnections metody .

  4. Klient może wywołać interfejs, IConnection aby uzyskać dostęp do obiektu podrzędnego modułu wyliczającego za pomocą interfejsu IEnumConnectionPoints . Następnie IEnumConnectionPoints można wywołać interfejs w celu wyliczenia punktów połączenia dla każdego identyfikatora interfejsu wychodzącego (IID).

  5. IConnection Można również wywołać polecenie w celu uzyskania dostępu do obiektów podrzędnych punktu połączenia za pomocą interfejsu IConnectionPoint dla każdego wychodzącego identyfikatora IID. Za pośrednictwem interfejsu IConnectionPoint klient uruchamia lub kończy pętlę porad z obiektem z możliwością połączenia i własną synchronizacją klienta. Klient może również wywołać IConnectionPoint interfejs w celu uzyskania obiektu modułu wyliczającego z interfejsem IEnumConnections w celu wyliczenia połączeń, o których wie.

Pobieranie opisów pól z okna Właściwości

W dolnej części okna Właściwości w obszarze opisu są wyświetlane informacje związane z wybranym polem właściwości. Domyślnie ta opcja jest włączona. Jeśli chcesz ukryć pole opisu, kliknij prawym przyciskiem myszy okno Właściwości i kliknij pozycję Opis. Spowoduje to również usunięcie znacznika wyboru obok tytułu Opis w oknie menu. Możesz ponownie wyświetlić pole, wykonując te same kroki, aby włączyć przełącznik Opis .

Informacje w polu opisu pochodzą z ITypeInfoelementu . Każda metoda, interfejs, coclass i tak dalej mogą mieć nielokalizowany helpstring atrybut w bibliotece typów. Okno Właściwości pobiera ciąg z GetDocumentation.

Aby określić zlokalizowane ciągi pomocy

  1. helpstringdll Dodaj atrybut do instrukcji biblioteki w bibliotece typów (typelib).

    Uwaga

    Ten krok jest opcjonalny, jeśli biblioteka typów znajduje się w pliku biblioteki obiektów (olb).

  2. Określ helpstringcontext atrybuty dla ciągów. Można również określić helpstring atrybuty.

    Te atrybuty różnią się od helpfile atrybutów i helpcontext , które znajdują się w rzeczywistych tematach Pomocy pliku chm.

    Aby pobrać informacje o opisie, które mają być wyświetlane dla wyróżnionej nazwy właściwości, okno Właściwości wywołuje GetDocumentation2 wybraną właściwość, określając żądany lcid atrybut dla ciągu wyjściowego. ITypeInfo2 Wewnętrznie znajduje plik dll określony w atrybucie helpstringdll i wywołuje DLLGetDocumentation ten plik dll z określonym kontekstem i lcid atrybutem.

    Podpis i implementacja programu DLLGetDocumentation to:

STDAPI DLLGetDocumentation
(
   ITypeLib * /* ptlib */,
   ITypeInfo * /* ptinfo */,
   LCID /* lcid */,
   DWORD dwCtx,
   BSTR * pbstrHelpString
);

Funkcja DLLGetDocumentation musi być eksportem zdefiniowanym w pliku def dla biblioteki DLL.

Wewnętrznie tworzony jest plik olb, który jest faktycznie biblioteką DLL. Ta biblioteka DLL zawiera jeden zasób, plik biblioteki typów (.tlb) i jedną wyeksportowaną funkcję DLLGetDocumentation.

W przypadku plików olb atrybut jest opcjonalny, helpstringdll ponieważ jest to ten sam plik, który zawiera sam plik tlb.

Aby uzyskać ciągi do wyświetlenia w okienku Opisy , dlatego minimum, które należy zrobić, to określenie atrybutu helpstring w bibliotece typów. Jeśli chcesz, aby te ciągi były zlokalizowane, musisz określić helpstringdll (opcjonalny) atrybut i helpstringcontext (wymagany) atrybut i zaimplementować DLLGetDocumentation.

Nie ma żadnych dodatkowych interfejsów, które należy zaimplementować podczas uzyskiwania zlokalizowanych informacji za pomocą atrybutu helpstringcontext idl i DLLGetDocumentation.

Innym sposobem uzyskania zlokalizowanej nazwy i opisu właściwości jest zaimplementowanie GetLocalizedPropertyInfoelementu . Aby uzyskać więcej informacji dotyczących implementacji tej metody, zobacz Pola i interfejsy okna właściwości.

Zobacz też