Freigeben über


So fügen Sie Tree-View Elemente hinzu

Sie fügen ein Element zu einem Strukturansichtssteuerelement hinzu, indem Sie die TVM_INSERTITEM Nachricht an das Steuerelement senden. Die Nachricht enthält die Adresse einer TVINSERTSTRUCT-Struktur , die angabe des übergeordneten Elements, 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 Bilder und ein 32-Bit-anwendungsdefinierter Wert.

Was Sie wissen müssen

Technologieen

Voraussetzungen

  • C/C++
  • Programmierung der Windows-Benutzeroberfläche

Anweisungen

Hinzufügen von Elementen zum Tree-View

Das Beispiel in diesem Abschnitt veranschaulicht das Erstellen eines Inhaltsverzeichnisses basierend auf Dokumentüberschrifteninformationen, die in einem anwendungsdefinierten 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 enthält zwei Funktionen. Die erste Funktion extrahiert jede Überschrift und die zugehörige Überschriftenebene und übergibt sie dann an die zweite Funktion.

Mit der zweiten Funktion wird einem Strukturansichtssteuerelement ein Element hinzugefügt. Er verwendet den Überschriftentext als Beschriftung des Elements und verwendet die Überschriftenebene, um das übergeordnete Element für das neue Element zu bestimmen. Eine Überschrift der ersten Ebene wird dem Stammverzeichnis des Strukturansichtssteuerelements hinzugefügt, eine Überschrift der zweiten Ebene wird als untergeordnetes Element der vorherigen Ebene 1 Element usw. hinzugefügt. Die Funktion weist einem Element ein Bild basierend darauf zu, ob es untergeordnete Elemente enthält. Wenn ein Element untergeordnete Elemente enthält, wird ein Bild abgerufen, das einen geschlossenen Ordner darstellt. Andernfalls wird ein Bild abgerufen, das ein Dokument darstellt. Ein Element verwendet dasselbe Bild für die ausgewählten und nicht ausgewählten Zustände.

// 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; 
}