Compartilhar via


Como adicionar itens de exibição de árvore

Você adiciona um item a um controle de exibição de árvore enviando a mensagem TVM_INSERTITEM para o controle. A mensagem inclui o endereço de uma estrutura TVINSERTSTRUCT, especificando o item pai, o item após o qual o novo item é inserido e uma estrutura TVITEM que define os atributos do item. Os atributos incluem o rótulo do item, suas imagens selecionadas e não selecionadas e um valor definido pelo aplicativo de 32 bits.

O que você precisa saber

Tecnologias

Pré-requisitos

  • C/C++
  • Programação da interface do usuário do Windows

Instruções

Adicionar itens ao modo de exibição em árvore

O exemplo nesta seção demonstra como criar um sumário com base nas informações de título do documento fornecidas em uma matriz definida pelo aplicativo. Cada elemento de matriz consiste em uma cadeia de caracteres de cabeçalho e um inteiro que indica o nível de título. O exemplo oferece suporte a três níveis de título (1, 2 e 3).

O exemplo inclui duas funções. A primeira função extrai cada título e nível de título que os acompanha e, em seguida, passa-os para a segunda função.

A segunda função adiciona um item a um controle de exibição em árvore. Ele usa o texto do título como o rótulo do item e usa o nível de título para determinar o item pai para o novo item. Um título de nível um é adicionado à raiz do controle de exibição em árvore, um título de nível dois é adicionado como um item filho do item de nível um anterior e assim por diante. A função atribui uma imagem a um item com base em se ele tem itens filho. Se um item tiver itens filho, ele obterá uma imagem que representa uma pasta fechada. Caso contrário, ele obtém uma imagem que representa um documento. Um item usa a mesma imagem para os estados selecionados e não selecionados.

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

Usando controles de exibição em árvore

Exemplo de CustDTv ilustra o desenho personalizado em um controle Tree-View