Tree-View elemek hozzáadása
Egy elemet ad hozzá egy faképernyő vezérlőhöz az TVM_INSERTITEM üzenet küldésével a vezérlőnek. Az üzenet tartalmazza egy TVINSERTSTRUCT struktúra címét, megadva a szülőelemet, azt az elemet, amely után az új elemet beszúrja, valamint egy TVITEM struktúrát, amely meghatározza az elem attribútumait. Az attribútumok közé tartozik az elem címkéje, a kijelölt és a nem kijelölt képek, valamint egy 32 bites alkalmazás által definiált érték.
- C/C++
- Windows felhasználói felület programozása
Az ebben a szakaszban szereplő példa bemutatja, hogyan hozhat létre tartalomjegyzéket egy alkalmazás által definiált tömbben megadott dokumentumfejléc-információk alapján. Minden tömbelem egy címsorsztringből és egy egész számból áll, amely a címsorszintet jelzi. A példa három címsorszintet támogat (1, 2 és 3).
A példa két függvényt tartalmaz. Az első függvény kinyeri az egyes címsorokat és a hozzá tartozó címsorszinteket, majd átadja őket a második függvénynek.
A második függvény egy elemet ad hozzá egy fanézet vezérlőelemhez. A címsorszöveget használja az elem címkéjeként, és a címsorszinttel határozza meg az új elem szülőelemét. A fanézet vezérlőelem gyökeréhez hozzáad egy első szintű címsort, egy második szintű címsort az előző, első szintű elem gyermekelemeként, és így tovább. A függvény egy képet rendel egy elemhez attól függően, hogy vannak-e gyermekelemei. Ha egy elem tartalmaz gyermekelemeket, a rendszer egy zárt mappát ábrázoló képet kap. Ellenkező esetben egy dokumentumot jelképező képet kap. Az elemek ugyanazt a képet használják a kijelölt és a nem kijelölt állapotokhoz is.
// 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;
}