Hinzufügen von Tree-View Elementen
Sie fügen einem Strukturansichtssteuerelement ein Element hinzu, indem Sie die TVM_INSERTITEM Nachricht an das Steuerelement senden. Die Nachricht enthält die Adresse einer TVINSERTSTRUCT-Struktur , die das übergeordnete Element, das Element, nach dem das neue Element eingefügt wird, und eine TVITEM-Struktur , die die Attribute des Elements definiert. Zu den Attributen gehören die Bezeichnung des Elements, die ausgewählten und nicht ausgewählten Images sowie ein anwendungsdefinierter 32-Bit-Wert.
Wichtige Informationen
Technologien
Voraussetzungen
- C/C++
- Programmierung der Windows-Benutzeroberfläche
Anweisungen
Hinzufügen von Elementen zum Tree-View
Das Beispiel in diesem Abschnitt veranschaulicht, wie Sie ein Inhaltsverzeichnis basierend auf Dokumentüberschrifteninformationen erstellen, die in einem anwendungsdefiniertem Array bereitgestellt werden. Jedes Arrayelement besteht aus einer Überschriftenzeichenfolge und einer ganzen Zahl, die die Überschriftenebene angibt. Das Beispiel unterstützt drei Überschriftenebenen (1, 2 und 3).
Das Beispiel umfasst zwei Funktionen. Die erste Funktion extrahiert jede Überschrift und begleitende Überschriftsebene und übergibt sie dann an die zweite Funktion.
Die zweite Funktion fügt einem Strukturansichtssteuerelement ein Element hinzu. Es verwendet den Überschriftentext als Bezeichnung des Elements und verwendet die Überschriftenebene, um das übergeordnete Element für das neue Element zu bestimmen. Eine Überschrift der ersten Ebene wird dem Stamm des Strukturansichtssteuerelements hinzugefügt, eine Überschrift der Zweiten Ebene wird als untergeordnetes Element des vorherigen Elements der 1. Ebene hinzugefügt usw. Die Funktion weist einem Element ein Bild zu, basierend darauf, ob es untergeordnete Elemente enthält. Wenn ein Element über untergeordnete Elemente verfügt, erhält es ein Image, das einen geschlossenen Ordner darstellt. Andernfalls wird ein Bild abgerufen, das ein Dokument darstellt. Ein Element verwendet dasselbe Bild sowohl für den ausgewählten als auch für den nicht ausgewählten Status.
// Adds items to a tree-view control.
// Returns the handle to the newly added item.
// hwndTV - handle to the tree-view control.
// lpszItem - text of the item to add.
// nLevel - level at which to add the item.
//
// g_nClosed, and g_nDocument - global indexes of the images.
HTREEITEM AddItemToTree(HWND hwndTV, LPTSTR lpszItem, int nLevel)
{
TVITEM tvi;
TVINSERTSTRUCT tvins;
static HTREEITEM hPrev = (HTREEITEM)TVI_FIRST;
static HTREEITEM hPrevRootItem = NULL;
static HTREEITEM hPrevLev2Item = NULL;
HTREEITEM hti;
tvi.mask = TVIF_TEXT | TVIF_IMAGE
| TVIF_SELECTEDIMAGE | TVIF_PARAM;
// Set the text of the item.
tvi.pszText = lpszItem;
tvi.cchTextMax = sizeof(tvi.pszText)/sizeof(tvi.pszText[0]);
// Assume the item is not a parent item, so give it a
// document image.
tvi.iImage = g_nDocument;
tvi.iSelectedImage = g_nDocument;
// Save the heading level in the item's application-defined
// data area.
tvi.lParam = (LPARAM)nLevel;
tvins.item = tvi;
tvins.hInsertAfter = hPrev;
// Set the parent item based on the specified level.
if (nLevel == 1)
tvins.hParent = TVI_ROOT;
else if (nLevel == 2)
tvins.hParent = hPrevRootItem;
else
tvins.hParent = hPrevLev2Item;
// Add the item to the tree-view control.
hPrev = (HTREEITEM)SendMessage(hwndTV, TVM_INSERTITEM,
0, (LPARAM)(LPTVINSERTSTRUCT)&tvins);
if (hPrev == NULL)
return NULL;
// Save the handle to the item.
if (nLevel == 1)
hPrevRootItem = hPrev;
else if (nLevel == 2)
hPrevLev2Item = hPrev;
// The new item is a child item. Give the parent item a
// closed folder bitmap to indicate it now has child items.
if (nLevel > 1)
{
hti = TreeView_GetParent(hwndTV, hPrev);
tvi.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvi.hItem = hti;
tvi.iImage = g_nClosed;
tvi.iSelectedImage = g_nClosed;
TreeView_SetItem(hwndTV, &tvi);
}
return hPrev;
}
// Extracts heading text and heading levels from a global
// array and passes them to a function that adds them as
// parent and child items to a tree-view control.
// Returns TRUE if successful, or FALSE otherwise.
// hwndTV - handle to the tree-view control.
BOOL InitTreeViewItems(HWND hwndTV)
{
HTREEITEM hti;
// g_rgDocHeadings is an application-defined global array of
// the following structures:
// typedef struct
// {
// TCHAR tchHeading[MAX_HEADING_LEN];
// int tchLevel;
// } Heading;
for (int i = 0; i < ARRAYSIZE(g_rgDocHeadings); i++)
{
// Add the item to the tree-view control.
hti = AddItemToTree(hwndTV, g_rgDocHeadings[i].tchHeading,
g_rgDocHeadings[i].tchLevel);
if (hti == NULL)
return FALSE;
}
return TRUE;
}
Zugehörige Themen