Informationen zu Tree-View-Steuerelementen

Ein Strukturansichtssteuerelement ist ein Fenster, in dem eine hierarchische Liste von Elementen angezeigt wird, z. B. die Überschriften in einem Dokument, die Einträge in einem Index oder die Dateien und Verzeichnisse auf einem Datenträger. Jedes Element besteht aus einer Bezeichnung und einem optionalen Bitmapbild, und jedem Element kann eine Liste von Unterelementen zugeordnet sein. Durch Klicken auf ein Element kann der Benutzer die zugeordnete Liste der Unterelemente erweitern oder reduzieren.

Die folgende Abbildung zeigt ein einfaches Strukturansichtssteuerelement mit einem Stammknoten, einem erweiterten Knoten und einem reduzierten Knoten. Das Steuerelement verwendet eine Bitmap für das ausgewählte Element und eine andere Bitmap für andere Elemente.

Screenshot mit fünf Knoten in einer Hierarchie; Der Text eines Knotens ist ausgewählt, knoten sind jedoch nicht durch Zeilen miteinander verknüpft.

Nach dem Erstellen eines Strukturansichtssteuerelements können Sie Elemente hinzufügen, entfernen, anordnen oder anderweitig bearbeiten, indem Sie Nachrichten an das Steuerelement senden. Jede Nachricht verfügt über ein oder mehrere entsprechende Makros, die Sie verwenden können, anstatt die Nachricht explizit zu senden.

Die folgenden Themen werden in diesem Abschnitt behandelt.

Tree-View Stile

Strukturansichtsstile steuern Aspekte der Darstellung eines Strukturansichtssteuerelements. Sie legen die anfänglichen Stile fest, wenn Sie das Strukturansichtssteuerelement erstellen. Sie können die Stile abrufen und ändern, nachdem Sie das Strukturansichtssteuerelement mithilfe der Funktionen GetWindowLong und SetWindowLong erstellt haben.

Das TVS_HASLINES-Format verbessert die grafische Darstellung der Hierarchie eines Strukturansichtssteuerelements, indem Linien gezeichnet werden, die untergeordnete Elemente mit dem übergeordneten Element verknüpfen, wie in der folgenden Abbildung dargestellt.

Screenshot mit der vorherigen Anordnung, aber mit Linien, die die Knoten verbinden; die erste Zeile vom Stammknoten absteigt

An sich zeichnet dieser Stil keine Linien am Stamm der Hierarchie. Dazu müssen Sie die stile "TVS_HASLINES" und "TVS_LINESATROOT " kombinieren. Das Ergebnis ist in der folgenden Abbildung dargestellt.

Screenshot mit der vorherigen Anordnung, jedoch mit einer zusätzlichen horizontalen Linie, die zum Stammknoten führt

Der Benutzer kann die Liste der untergeordneten Elemente eines übergeordneten Elements erweitern oder reduzieren, indem er auf das übergeordnete Element doppelklicken. Ein Strukturansichtssteuerelement, das über das TVS_HASBUTTONS-Format verfügt, fügt links neben jedem übergeordneten Element eine Schaltfläche hinzu. Der Benutzer kann einmal auf die Schaltfläche klicken, anstatt auf das übergeordnete Element zu doppelklicken, um das untergeordnete Element zu erweitern oder zu reduzieren. TVS_HASBUTTONS fügt Elementen im Stamm der Hierarchie keine Schaltflächen hinzu. Dazu müssen Sie TVS_HASLINES, TVS_LINESATROOT und TVS_HASBUTTONS kombinieren. Diese Kombination von Stilen ist in der folgenden Abbildung dargestellt.

Screenshot mit der vorherigen Anordnung, aber mit Schaltflächen zum Erweitern/Reduzieren an jedem Scheitelpunkt von zwei Zeilen

Die TVS_CHECKBOXES Formatvorlage erstellt Kontrollkästchen neben jedem Element. Wenn Sie das Kontrollkästchenformat verwenden möchten, müssen Sie die TVS_CHECKBOXES Formatvorlage (mit SetWindowLong) festlegen, nachdem Sie das Strukturansichtssteuerelement erstellt haben und bevor Sie die Struktur auffüllen. Andernfalls werden die Kontrollkästchen je nach Zeitsteuerungsproblemen möglicherweise deaktiviert angezeigt. Die folgende Abbildung zeigt das Kontrollkästchenformat.

Screenshot mit der vorherigen Anordnung, aber mit einem Kontrollkästchen neben jedem Knoten; Zwei der Kontrollkästchen sind aktiviert.

Die TVS_FULLROWSELECT Formatvorlage bewirkt, dass sich die Auswahlherhebung über die gesamte Breite des Steuerelements erstreckt, nicht nur über das Element selbst. Die folgende Abbildung zeigt diesen Stil.

Screenshot mit der ursprünglichen Anordnung von fünf Knoten ohne Linien, aber die Auswahlhervorhebung erweitert die volle Breite des Steuerelements.

Der TVS_EDITLABELS Stil ermöglicht es dem Benutzer, die Bezeichnungen von Strukturansichtselementen zu bearbeiten. Weitere Informationen zum Bearbeiten von Bezeichnungen finden Sie unter Bearbeiten von Bezeichnungen in der Strukturansicht.

Weitere Informationen zu diesen und anderen Formatvorlagen finden Sie unter Strukturansicht-Steuerelementfensterstile.

Übergeordnete und untergeordnete Elemente

Jedem Element in einem Strukturansichtssteuerelement kann eine Liste von Untergeordneten Elementen zugeordnet sein, die als untergeordnete Elemente bezeichnet werden. Ein Element mit einem oder mehreren untergeordneten Elementen wird als übergeordnetes Element bezeichnet. Ein untergeordnetes Element wird unterhalb des übergeordneten Elements angezeigt und eingezogen, um anzugeben, dass es dem übergeordneten Element untergeordnet ist. Ein Element ohne übergeordnetes Element wird oben in der Hierarchie angezeigt und als Stammelement bezeichnet.

Um einem Strukturansichtssteuerelement ein Element hinzuzufügen, senden Sie die TVM_INSERTITEM-Nachricht an das Steuerelement. Die Nachricht gibt ein Handle an den HTREEITEM-Typ zurück, der das Element eindeutig identifiziert. Beim Hinzufügen eines Elements müssen Sie das Handle für das übergeordnete Element des neuen Elements angeben. Wenn Sie NULL oder den TVI_ROOT Wert anstelle eines Handles für übergeordnete Elemente in der TVINSERTSTRUCT-Struktur angeben, wird das Element als Stammelement hinzugefügt.

Der Status der Liste der untergeordneten Elemente eines übergeordneten Elements kann jederzeit erweitert oder reduziert werden. Wenn der Status erweitert wird, werden die untergeordneten Elemente unter dem übergeordneten Element angezeigt. Wenn sie reduziert ist, werden die untergeordneten Elemente nicht angezeigt. Die Liste schaltet automatisch zwischen dem erweiterten und dem reduzierten Zustand um, wenn der Benutzer auf das übergeordnete Element doppelklicken oder, wenn das übergeordnete Element die TVS_HASBUTTONS Stil aufweist, wenn der Benutzer auf die Schaltfläche klickt, die dem übergeordneten Element zugeordnet ist. Eine Anwendung kann die untergeordneten Elemente mithilfe der TVM_EXPAND-Meldung erweitern oder reduzieren.

Ein Strukturansichtssteuerelement sendet dem übergeordneten Fenster eine TVN_ITEMEXPANDING Benachrichtigung, wenn die Liste der untergeordneten Elemente eines übergeordneten Elements erweitert oder reduziert werden soll. Die Benachrichtigung gibt einer Anwendung die Möglichkeit, die Änderung zu verhindern oder Attribute des übergeordneten Elements festzulegen, die vom Status der Liste der untergeordneten Elemente abhängen. Nach dem Ändern des Status der Liste sendet das Strukturansichtssteuerelement dem übergeordneten Fenster eine TVN_ITEMEXPANDED Benachrichtigung.

Wenn eine Liste untergeordneter Elemente erweitert wird, wird sie relativ zum übergeordneten Element eingerückt. Sie können den Umfang des Einzugs mithilfe der TVM_SETINDENT Nachricht festlegen oder den aktuellen Betrag mithilfe der TVM_GETINDENT Nachricht abrufen.

Ein Strukturansichtssteuerelement verwendet Arbeitsspeicher, der aus dem Heap des Prozesses zugeordnet ist, der das Strukturansichtssteuerelement erstellt. Die maximale Anzahl von Elementen in einer Strukturansicht basiert auf der Menge des im Heap verfügbaren Arbeitsspeichers.

Elementbeschriftungen

In der Regel geben Sie den Text der Bezeichnung eines Elements an, wenn Sie das Element zum Strukturansichtssteuerelement hinzufügen. Die TVM_INSERTITEM Nachricht enthält eine TVITEM-Struktur , die die Eigenschaften des Elements definiert, einschließlich einer Zeichenfolge, die den Text der Bezeichnung enthält.

Ein Strukturansichtssteuerelement ordnet Arbeitsspeicher zum Speichern der einzelnen Elemente zu. der Text der Elementbeschriftungen nimmt einen erheblichen Teil dieses Arbeitsspeichers ein. Wenn Ihre Anwendung eine Kopie der Zeichenfolgen im Strukturansichtssteuerelement verwaltet, können Sie die Speicheranforderungen des Steuerelements verringern, indem Sie den wert für LPSTR_TEXTCALLBACK im pszText-Element von TVITEM angeben, anstatt tatsächliche Zeichenfolgen an die Strukturansicht zu übergeben. Die Verwendung von LPSTR_TEXTCALLBACK bewirkt, dass das Strukturansicht-Steuerelement den Text der Beschriftung eines Elements aus dem übergeordneten Fenster abruft, wenn das Element neu gezeichnet werden muss. Um den Text abzurufen, sendet das Strukturansichtssteuerelement eine TVN_GETDISPINFO Benachrichtigung, die die Adresse einer NMTVDISPINFO-Struktur enthält. Das übergeordnete Fenster muss die entsprechenden Member der eingeschlossenen Struktur ausfüllen.

bearbeiten von Tree-View Bezeichnungen

Der Benutzer kann die Bezeichnungen von Elementen in einem Strukturansichtssteuerelement direkt bearbeiten, das den TVS_EDITLABELS Stil aufweist. Der Benutzer beginnt mit der Bearbeitung, indem er auf die Bezeichnung des Elements mit dem Fokus klickt. Eine Anwendung beginnt mit der Bearbeitung mithilfe der TVM_EDITLABEL Meldung. Das Strukturansicht-Steuerelement benachrichtigt das übergeordnete Fenster, wenn die Bearbeitung beginnt und wann sie abgebrochen oder abgeschlossen wird. Wenn die Bearbeitung abgeschlossen ist, ist das übergeordnete Fenster für die Aktualisierung der Bezeichnung des Elements zuständig, falls erforderlich.

Wenn die Bearbeitung von Bezeichnungen beginnt, sendet ein Strukturansicht-Steuerelement dem übergeordneten Fenster eine TVN_BEGINLABELEDIT Benachrichtigung. Durch die Verarbeitung dieser Benachrichtigung kann eine Anwendung die Bearbeitung einiger Bezeichnungen ermöglichen und die Bearbeitung anderer Bezeichnungen verhindern. Die Rückgabe von 0 (null) ermöglicht die Bearbeitung, und die Rückgabe ungleich null verhindert dies.

Wenn die Bearbeitung von Bezeichnungen abgebrochen oder abgeschlossen ist, sendet ein Strukturansichtssteuerelement dem übergeordneten Fenster eine TVN_ENDLABELEDIT Benachrichtigung. Der lParam-Parameter ist die Adresse einer NMTVDISPINFO-Struktur . Der item-Parameter ist eine TVITEM-Struktur , die das Element identifiziert und den bearbeiteten Text enthält. Das übergeordnete Fenster ist für die Aktualisierung der Bezeichnung des Elements zuständig, wenn die neue Bezeichnung beibehalten werden soll. Das pszText-Element von TVITEM ist null, wenn die Bearbeitung abgebrochen wird.

Während der Bearbeitung von Bezeichnungen, in der Regel als Reaktion auf die TVN_BEGINLABELEDIT Benachrichtigung, können Sie das Handle für das Bearbeitungssteuerelement abrufen, das für die Bearbeitung von Bezeichnungen verwendet wird, indem Sie die TVM_GETEDITCONTROL Nachricht verwenden. Sie können dem Bearbeitungssteuerelement eine EM_SETLIMITTEXT Nachricht senden, um die Textmenge zu begrenzen, die ein Benutzer eingeben kann, oder unterklassen des Bearbeitungssteuerelements, um ungültige Zeichen abzufangen und zu verwerfen. Beachten Sie jedoch, dass das Bearbeitungssteuerelement erst angezeigt wird, nachdem TVN_BEGINLABELEDIT gesendet wurde.

Position des Tree-View-Elements

Die Anfangsposition eines Elements wird festgelegt, wenn das Element mithilfe der TVM_INSERTITEM-Nachricht dem Strukturansichtssteuerelement hinzugefügt wird. Die Nachricht enthält eine TVINSERTSTRUCT-Struktur , die das Handle für das übergeordnete Element und das Handle für das Element angibt, nach dem das neue Element eingefügt werden soll. Das zweite Handle muss entweder ein untergeordnetes Element des angegebenen übergeordneten Elements oder einen der folgenden Werte identifizieren: TVI_FIRST, TVI_LAST oder TVI_SORT.

Wenn TVI_FIRST oder TVI_LAST angegeben wird, platziert das Strukturansichtssteuerelement das neue Element am Anfang oder Ende der Liste der untergeordneten Elemente des angegebenen übergeordneten Elements. Wenn TVI_SORT angegeben wird, fügt das Strukturansichtssteuerelement das neue Element in alphabetischer Reihenfolge basierend auf dem Text der Elementbeschriftungen in die Liste der untergeordneten Elemente ein.

Sie können die Liste der untergeordneten Elemente eines übergeordneten Elements in alphabetischer Reihenfolge platzieren, indem Sie die TVM_SORTCHILDREN Nachricht verwenden. Die Nachricht enthält einen Parameter, der angibt, ob alle Ebenen untergeordneter Elemente, die von dem angegebenen übergeordneten Element absteigen, auch in alphabetischer Reihenfolge sortiert werden.

Mit der TVM_SORTCHILDRENCB Nachricht können Sie untergeordnete Elemente basierend auf den von Ihnen definierten Kriterien sortieren. Wenn Sie diese Meldung verwenden, geben Sie eine anwendungsdefinierte Rückruffunktion an, die das Strukturansichtssteuerelement aufrufen kann, wenn die relative Reihenfolge von zwei untergeordneten Elementen festgelegt werden muss. Die Rückruffunktion empfängt zwei anwendungsdefinierte 32-Bit-Werte für die verglichenen Elemente und einen dritten 32-Bit-Wert, den Sie beim Senden TVM_SORTCHILDRENCB angeben.

Übersicht über Tree-View Elementzustände

Jedes Element in einem Strukturansichtssteuerelement hat einen aktuellen Zustand. Die Zustandsinformationen für jedes Element enthalten eine Reihe von Bitflags sowie Bildlistenindizes, die das Zustandsbild und das Überlagerungsbild des Elements angeben. Die Bitflags geben an, ob das Element ausgewählt, deaktiviert, erweitert usw. ist. In den meisten Fällen legt ein Strukturansichtssteuerelement den Status eines Elements automatisch fest, um Benutzeraktionen wie die Auswahl eines Elements widerzuspiegeln. Sie können den Status eines Elements jedoch auch mithilfe der TVM_SETITEM Nachricht festlegen, und Sie können den aktuellen Status eines Elements mithilfe der TVM_GETITEM-Nachricht abrufen. Eine vollständige Liste der Elementzustände finden Sie unter Strukturansichtssteuerelementelementzustände.

Der aktuelle Status eines Elements wird durch das Zustandsmitglied der TVITEM-Struktur angegeben. Ein Strukturansichtssteuerelement kann den Status eines Elements ändern, um eine Benutzeraktion widerzuspiegeln, z. B. das Auswählen des Elements oder festlegen des Fokus auf das Element. Darüber hinaus kann eine Anwendung den Status eines Elements ändern, um das Element zu deaktivieren oder auszublenden oder ein Überlagerungsbild oder zustandsbild anzugeben.

Wenn Sie den Status eines Elements angeben oder ändern, gibt die Zustandsmaske von TVITEM an, welche Zustandsbits festgelegt werden sollen, und der Zustandsmember enthält die neuen Werte für diese Bits.

Um das Überlagerungsbild eines Elements festzulegen, muss die Zustandsmaske den TVIS_OVERLAYMASK-Wert enthalten, und der Zustand muss den einbasierten Index des Überlagerungsbilds enthalten, das mithilfe des Makros INDEXTOOVERLAYMASK um linke 8 Bit verschoben wurde. Der Index kann null sein, um kein Überlagerungsbild anzugeben.

Ein Zustandsbild wird neben dem Symbol eines Elements angezeigt, um einen anwendungsdefinierten Zustand anzuzeigen. Zustandsbilder sind in einer Zustandsbildliste enthalten, die durch Senden einer TVM_SETIMAGELIST-Nachricht angegeben wird. Um das Zustandsbild eines Elements festzulegen, fügen Sie den wert TVIS_STATEIMAGEMASK in die Zustandsmaske der TVITEM-Struktur ein. Die Bits 12 bis 15 des Zustandselements der Struktur geben den Index in der Zustandsbildliste des zu zeichnenden Bilds an.

Um den Statusbildindex festzulegen, verwenden Sie INDEXTOSTATEIMAGEMASK. Dieses Makro nimmt einen Index an und legt die Bits 12 bis 15 entsprechend fest. Um anzugeben, dass das Element über kein Zustandsbild verfügt, legen Sie den Index auf Null fest. Diese Konvention bedeutet, dass image zero in der Statusimageliste nicht als Zustandsabbild verwendet werden kann. Um bits 12 bis 15 des Zustandsmitglieds zu isolieren, verwenden Sie die TVIS_STATEIMAGEMASK-Maske. Weitere Informationen zu Überlagerungs- und Zustandsbildern finden Sie unter Strukturansichtsbildlisten.

Elementauswahl

Ein Strukturansichtssteuerelement benachrichtigt das übergeordnete Fenster, wenn die Auswahl von einem Element in ein anderes geändert wird, indem es die TVN_SELCHANGING und TVN_SELCHANGED Benachrichtigungsmeldungen sendet. Beide Benachrichtigungen enthalten einen Wert, der angibt, ob die Änderung das Ergebnis eines Mausklicks oder einer Tastenkombination ist. Die Benachrichtigungen enthalten auch Informationen über das Element, das die Auswahl erhält, und das Element, das die Auswahl verliert. Mithilfe dieser Informationen können Sie Elementattribute festlegen, die vom Auswahlstatus des Elements abhängen. Die Rückgabe von TRUE als Reaktion auf TVN_SELCHANGING verhindert, dass sich die Auswahl ändert, und das Zurückgeben von FALSE ermöglicht die Änderung.

Eine Anwendung kann die Auswahl ändern, indem sie die TVM_SELECTITEM Nachricht sendet.

Elementinformationen

Strukturansichtssteuerelemente unterstützen eine Reihe von Nachrichten, die Informationen zu Elementen im Steuerelement abrufen.

Die TVM_GETITEM Nachricht können das Handle und die Attribute eines Elements abrufen. Zu den Attributen eines Elements gehören der aktuelle Zustand, die Indizes in der Bildliste des Steuerelements der ausgewählten und nicht ausgewählten Bitmapbilder des Elements, ein Flag, das angibt, ob das Element untergeordnete Elemente enthält, die Adresse der Bezeichnungszeichenfolge des Elements und den anwendungsdefinierten 32-Bit-Wert des Elements.

Die TVM_GETNEXTITEM Nachricht ruft das Strukturansichtselement ab, das die angegebene Beziehung zum aktuellen Element aufweist. Die Nachricht kann das übergeordnete Element eines Elements, das nächste oder vorherige sichtbare Element, das erste untergeordnete Element usw. abrufen.

Die TVM_GETITEMRECT Nachricht ruft das umgebende Rechteck für ein Strukturansichtselement ab. Die TVM_GETCOUNT und TVM_GETVISIBLECOUNT Nachrichten rufen eine Anzahl der Elemente in einem Strukturansichtssteuerelement und eine Anzahl der Elemente ab, die im Fenster des Strukturansichtssteuerelements vollständig sichtbar sein können. Sie können sicherstellen, dass ein bestimmtes Element sichtbar ist, indem Sie die TVM_ENSUREVISIBLE Nachricht verwenden.

Tree-View Bildlisten

Jedem Element in einem Strukturansichtssteuerelement können vier Bitmapbilder zugeordnet sein.

  • Ein Bild, z. B. ein geöffneter Ordner, wird angezeigt, wenn das Element ausgewählt ist.
  • Ein Bild, z. B. ein geschlossener Ordner, wird angezeigt, wenn das Element nicht ausgewählt ist.
  • Ein Überlagerungsbild, das transparent über das ausgewählte oder nicht ausgewählte Bild gezeichnet wird.
  • Ein Zustandsbild, bei dem es sich um ein zusätzliches Bild handelt, das links neben dem ausgewählten oder nicht ausgewählten Bild angezeigt wird. Sie können Zustandsbilder wie aktivierte und deaktivierte Kontrollkästchen verwenden, um anwendungsdefinierte Elementzustände anzugeben.

Standardmäßig zeigt ein Strukturansichtssteuerelement keine Elementbilder an. Zum Anzeigen von Elementbildern müssen Sie Bildlisten erstellen und sie dem Steuerelement zuordnen. Weitere Informationen zu Bildlisten finden Sie unter Bildlisten.

Ein Strukturansichtssteuerelement kann zwei Bildlisten aufweisen: eine normale Bildliste und eine Zustandsbildliste. In einer normalen Bildliste werden die ausgewählten, nicht ausgewählten und überlagerten Bilder gespeichert. In einer Zustandsbildliste werden Zustandsbilder gespeichert. Verwenden Sie die ImageList_Create-Funktion , um eine Bildliste zu erstellen, und verwenden Sie andere Bildlistenfunktionen, um Bitmaps zur Bildliste hinzuzufügen. Verwenden Sie dann die TVM_SETIMAGELIST Nachricht, um die Bildliste dem Strukturansichtssteuerelement zuzuordnen. Die TVM_GETIMAGELIST-Nachricht ruft ein Handle für eine der Bildlisten eines Strukturansichtssteuerelements ab. Diese Meldung ist nützlich, wenn Sie der Liste weitere Bilder hinzufügen müssen.

Zusätzlich zu den ausgewählten und nicht ausgewählten Bildern kann die normale Bildliste eines Strukturansichtssteuerelements bis zu vier Überlagerungsbilder enthalten. Überlagerungsbilder werden durch einen 1-basierten Index identifiziert und sind so konzipiert, dass sie transparent über die ausgewählten und nicht ausgewählten Bilder gezeichnet werden. Um einem Bild in der normalen Bildliste einen Überlagerungsmaskenindex zuzuweisen, rufen Sie die funktion ImageList_SetOverlayImage auf.

Standardmäßig zeigen alle Elemente das erste Bild in der normalen Bildliste sowohl für den ausgewählten als auch für den nicht ausgewählten Zustand an. Außerdem zeigen Elemente standardmäßig keine Überlagerungs- oder Zustandsbilder an. Sie können diese Standardverhaltensweisen für ein Element ändern, indem Sie die TVM_INSERTITEM oder TVM_SETITEM Nachricht senden. Diese Nachrichten verwenden die TVITEM-Struktur , um Bildlistenindizes für ein Element anzugeben.

Um die ausgewählten und nicht ausgewählten Bilder eines Elements anzugeben, legen Sie die TVIF_SELECTEDIMAGE- und TVIF_IMAGE Bits im Maskenelement der TVITEM-Struktur fest, und geben Sie Indizes aus der normalen Bildliste des Steuerelements in den Elementen iSelectImage und iImage an. Alternativ können Sie den I_IMAGECALLBACK Wert in iSelectImage und iImage angeben, anstatt Indizes anzugeben. Dies führt dazu, dass das Steuerelement sein übergeordnetes Fenster jedes Mal nach einem Bildlistenindex abfragt, wenn das Element neu gezeichnet werden soll. Das Steuerelement sendet die TVN_GETDISPINFO Benachrichtigungsnachricht, um den Index abzurufen.

Um ein Überlagerungsbild einem Element zuzuordnen, verwenden Sie das INDEXTOOVERLAYMASK-Makro , um einen Überlagerungsmaskenindex im Zustandselement der TVITEM-Struktur des Elements anzugeben. Sie müssen auch die TVIS_OVERLAYMASK Bits im stateMask-Element festlegen. Überlagerungsmaskenindizes sind einsbasiert; Ein Index von 0 gibt an, dass kein Überlagerungsbild angegeben wurde.

Zustandsbilder werden in einer separaten Zustandsbildliste gespeichert und durch ihren Index identifiziert. Um die Statusbildliste anzugeben, senden Sie eine TVM_SETIMAGELIST Nachricht. Im Gegensatz zum Listenansichtssteuerelement, das einen 1-basierten Index zum Identifizieren von Zustandsbildern verwendet, werden Strukturansichtssteuerelementstatusbilder durch einen nullbasierten Index identifiziert. Ein Index von 0 gibt jedoch an, dass das Element kein Zustandsimage aufweist. Daher kann image zero nicht als Zustandsbild verwendet werden. Weitere Informationen zu Elementzuständen und Zustandsbildern finden Sie unter Übersicht über Strukturansichtselementzustände.

Drag-and-Drop-Vorgänge

Ein Strukturansichtssteuerelement benachrichtigt das übergeordnete Fenster, wenn der Benutzer beginnt, ein Element zu ziehen. Das übergeordnete Fenster erhält eine TVN_BEGINDRAG Benachrichtigungsmeldung, wenn der Benutzer beginnt, ein Element mit der linken Maustaste zu ziehen, und eine TVN_BEGINRDRAG Benachrichtigungsmeldung, wenn der Benutzer mit dem Ziehen mit der rechten Schaltfläche beginnt. Sie können verhindern, dass ein Strukturansichtssteuerelement diese Benachrichtigungen sendet, indem Sie dem Strukturansichtssteuerelement das TVS_DISABLEDRAGDROP Format zukommen lassen.

Sie erhalten ein Bild, das während eines Ziehvorgangs angezeigt werden soll, indem Sie die TVM_CREATEDRAGIMAGE Meldung verwenden. Das Strukturansicht-Steuerelement erstellt eine Bitmap, die auf der Beschriftung des zu ziehenden Elements basiert. Anschließend erstellt das Strukturansichtssteuerelement eine Bildliste, fügt ihr die Bitmap hinzu und gibt das Handle zur Bildliste zurück.

Sie müssen den Code angeben, der das Element tatsächlich zieht. Dies umfasst in der Regel die Verwendung der Ziehfunktionen der Bildlistenfunktionen und die Verarbeitung der WM_MOUSEMOVE - und WM_LBUTTONUP -Nachrichten (oder WM_RBUTTONUP), die nach dem Start des Ziehvorgangs an das übergeordnete Fenster gesendet werden.

Wenn Elemente in einem Strukturansichtssteuerelement die Ziele von Drag-and-Drop-Vorgängen sein sollen, müssen Sie wissen, wann sich der Mauszeiger auf einem Zielelement befindet. Sie können dies mithilfe der TVM_HITTEST-Nachricht herausfinden. Sie geben die Adresse einer TVHITTESTINFO-Struktur an, die die aktuellen Koordinaten des Mauszeigers enthält. Wenn die SendMessage-Funktion zurückgegeben wird, enthält die Struktur ein Flag, das die Position des Mauszeigers relativ zum Strukturansichtssteuerelement angibt. Wenn sich der Zeiger auf ein Element im Strukturansichtssteuerelement befindet, enthält die Struktur auch das Handle zum Element.

Sie können angeben, dass ein Element das Ziel eines Drag-and-Drop-Vorgangs ist, indem Sie die TVM_SETITEM Meldung verwenden, um den Zustand auf den TVIS_DROPHILITED Wert festzulegen. Ein Element mit diesem Zustand wird in der Formatvorlage gezeichnet, die verwendet wird, um ein Drag-and-Drop-Ziel anzugeben.

Tree-View Steuern von Benachrichtigungen

Ein Strukturansichtssteuerelement sendet die folgenden Benachrichtigungen in Form von WM_NOTIFY Nachrichten an das übergeordnete Fenster.

Benachrichtigung Beschreibung
TVN_BEGINDRAG Signalisiert den Beginn eines Drag-and-Drop-Vorgangs.
TVN_BEGINLABELEDIT   Signalisiert den Beginn der direkten Bearbeitung von Bezeichnungen.
TVN_BEGINRDRAG Signalisiert, dass die rechte Maustaste einen Drag-and-Drop-Vorgang gestartet hat.
TVN_DELETEITEM Signalisiert das Löschen eines bestimmten Elements.
TVN_ENDLABELEDIT Signalisiert das Ende der Bearbeitung von Bezeichnungen.
TVN_GETDISPINFO Fordert Informationen an, die das Strukturansichtssteuerelement zum Anzeigen eines Elements benötigt.
TVN_ITEMEXPANDED Signalisiert, dass die Liste der untergeordneten Elemente eines übergeordneten Elements erweitert oder reduziert wurde.
TVN_ITEMEXPANDING Signalisiert, dass die Liste der untergeordneten Elemente eines übergeordneten Elements erweitert oder reduziert wird.
TVN_KEYDOWN Signalisiert ein Tastaturereignis.
TVN_SELCHANGED Signalisiert, dass sich die Auswahl von einem Element in ein anderes geändert hat.
TVN_SELCHANGING Signalisiert, dass die Auswahl von einem Element in ein anderes geändert werden soll.
TVN_SETDISPINFO Benachrichtigt ein übergeordnetes Fenster, dass es die Informationen aktualisieren muss, die es für ein Element verwaltet.

 

Standard-Tree-View- Steuerung der Nachrichtenverarbeitung

In diesem Abschnitt wird die Verarbeitung von Fensternachrichten beschrieben, die von einem Strukturansichtssteuerelement ausgeführt wird. Meldungen, die für Strukturansichtssteuerelemente spezifisch sind, werden in anderen Abschnitten dieses Dokuments erläutert, sodass sie hier nicht enthalten sind.

Nachricht Durchgeführte Verarbeitung
WM_COMMAND Verarbeitet die EN_UPDATE und EN_KILLFOCUS Benachrichtigungen zum Bearbeiten von Steuerelementen und leitet alle anderen Bearbeitungssteuerelementbenachrichtigungen an das übergeordnete Fenster weiter. Es ist kein Rückgabewert vorhanden.
WM_CREATE Ordnet Arbeitsspeicher zu und initialisiert interne Datenstrukturen. Bei erfolgreicher Ausführung wird null zurückgegeben, andernfalls -1.
WM_DESTROY Gibt alle Systemressourcen frei, die dem Steuerelement zugeordnet sind. Er gibt 0 (null) zurück.
WM_ENABLE Aktiviert oder deaktiviert das Steuerelement.
WM_ERASEBKGND Löscht den Fensterhintergrund mithilfe der aktuellen Hintergrundfarbe für das Strukturansichtssteuerelement. Es gibt TRUE zurück.
WM_GETDLGCODE Gibt eine Kombination aus den DLGC_WANTARROWS- und DLGC_WANTCHARS-Werten zurück.
WM_GETFONT Gibt das Handle an die aktuelle Bezeichnungsschriftart zurück.
WM_HSCROLL Führt einen Bildlauf im Strukturansichtssteuerelement durch. Wenn ein Bildlauf ausgeführt wird, wird TRUE zurückgegeben, andernfalls FALSE .
WM_KEYDOWN Sendet die TVN_KEYDOWN-Benachrichtigung für alle Schlüssel an das übergeordnete Fenster. Sendet die NM_RETURN -Benachrichtigung (Strukturansicht), wenn der Benutzer die EINGABETASTE drückt. Das Caret wird verschoben, wenn der Benutzer die Richtungstasten oder die SEITEN-NACH-OBEN-, BILD-NACH-UNTEN-, START-, END- oder RÜCKTASTE drückt. Es führt einen Bildlauf im Strukturansichtssteuerelement durch, wenn der Benutzer die STRG-TASTE in Kombination mit diesen Tasten drückt. Es gibt TRUE zurück, wenn ein Schlüssel verarbeitet wird, oder andernfalls FALSE .
WM_KILLFOCUS Erstellt das fokussierte Element erneut, falls vorhanden, und sendet eine NM_KILLFOCUS -Benachrichtigung (Strukturansicht) an das übergeordnete Fenster.
WM_LBUTTONDBLCLK Bricht die Bearbeitung von Bezeichnungen ab und sendet, wenn auf ein Element doppelklicken wurde, die Benachrichtigung NM_DBLCLK (Strukturansicht) an das übergeordnete Fenster. Wenn das übergeordnete Fenster 0 zurückgibt, schaltet das Strukturansichtssteuerelement den erweiterten Zustand des Elements um und sendet dem übergeordneten Fenster die TVN_ITEMEXPANDING und TVN_ITEMEXPANDED Benachrichtigungen. Es ist kein Rückgabewert vorhanden.
WM_LBUTTONDOWN Schaltet den erweiterten Zustand um, wenn der Benutzer auf die Schaltfläche geklickt hat, die einem übergeordneten Element zugeordnet ist. Wenn der Benutzer auf eine Elementbeschriftung geklickt hat, wählt das Strukturansichtssteuerelement das Element aus und legt den Fokus auf das Element fest. Wenn der Benutzer die Maus bewegt, bevor die Maustaste losgelassen wird, beginnt das Strukturansichtssteuerelement mit einem Drag-and-Drop-Vorgang. Es ist kein Rückgabewert vorhanden.
WM_PAINT Zeichnet den ungültigen Bereich des Strukturansichtssteuerelements. Er gibt 0 (null) zurück. Wenn der wParam-Parameter ungleich NULL ist, geht das Steuerelement davon aus, dass der Wert ein Handle für einen Gerätekontext (HDC) ist, und zeichnet mit diesem Gerätekontext.
WM_RBUTTONDOWN Überprüft, ob auf ein Element geklickt und ein Ziehvorgang gestartet wurde. Wenn der Vorgang begonnen hat, sendet er eine TVN_BEGINRDRAG-Benachrichtigung an das übergeordnete Fenster und hebt das Ablageziel hervor. Andernfalls wird eine NM_RCLICK -Benachrichtigung (Strukturansicht) an das übergeordnete Fenster gesendet. Es ist kein Rückgabewert vorhanden.
WM_SETFOCUS Erstellt das fokussierte Element erneut, falls vorhanden, und sendet eine NM_SETFOCUS-Benachrichtigung an das übergeordnete Fenster.
WM_SETFONT Speichert das angegebene Schriftarthandle und streicht das Strukturansichtssteuerelement mithilfe der neuen Schriftart neu.
WM_SETREDRAW Legt das Neuzeichnenflag fest oder löscht sie. Das Strukturansichtssteuerelement wird neu gezeichnet, nachdem das Redraw-Flag festgelegt wurde. Er gibt 0 (null) zurück.
WM_SIZE Berechnet interne Variablen neu, die von der Größe des Clientbereichs des Strukturansichtssteuerelements abhängen. Es gibt TRUE zurück.
WM_STYLECHANGED Bricht die Bearbeitung von Bezeichnungen ab und zeichnet das Strukturansichtssteuerelement mithilfe der neuen Stile neu. Er gibt 0 (null) zurück.
WM_SYSCOLORCHANGE Zeichnet das Strukturansichtssteuerelement mit der neuen Farbe neu aus, wenn das Redraw-Flag festgelegt ist. Es ist kein Rückgabewert vorhanden.
WM_TIMER Beginnt mit der Bearbeitung einer Elementbezeichnung. Wenn der Benutzer auf die Bezeichnung des fokussierten Elements klickt, legt das Strukturansicht-Steuerelement einen Timer fest, anstatt sofort in den Bearbeitungsmodus zu wechseln. Der Timer ermöglicht es der Strukturansicht, den Wechsel in den Bearbeitungsmodus zu vermeiden, wenn der Benutzer auf die Bezeichnung doppelklicken. Er gibt 0 (null) zurück.
WM_VSCROLL Führt einen Bildlauf im Strukturansichtssteuerelement durch. Wenn ein Bildlauf ausgeführt wird, wird TRUE zurückgegeben, andernfalls FALSE .

 

SAMPLE: CustDTv Illustrates Custom Draw in a TreeView (Q248496)