目录树(TreeView)本质也是一个窗口,创建步骤如下:
- 引用#include <CommCtrl.h>
- 创建TreeView控件句柄。
- 使用CreateWindowEx api 将其lpWindowName参数设为WC_TREEVIEW
HWND CreateATreeView(HWND hwndParent)
{
HWND hwndTV;
hwndTV = CreateWindowEx(0,
WC_TREEVIEW,
TEXT("Tree View"),
WS_VISIBLE | WS_CHILD | TVS_HASLINES|TVS_HASBUTTONS | TVS_LINESATROOT,
CW_USEDEFAULT,
CW_USEDEFAULT,
TreeViewWeight,
400,
hwndParent,
NULL,
hIns,
NULL);
return hwndTV;
}
添加节点
两个关键结构
1.tvitem:指定或接收树视图项的属性。
typedef struct tagTVITEMA {
UINT mask;
HTREEITEM hItem;
UINT state;
UINT stateMask;
LPSTR pszText;
int cchTextMax;
int iImage;
int iSelectedImage;
int cChildren;
LPARAM lParam;
} TVITEMA, *LPTVITEMA;
2.tvinsertstruct:包含用于将新项添加到树视图控件的信息,此结构与TVM_INSERTITEM消息一起使用。
typedef struct tagTVINSERTSTRUCTA {
HTREEITEM hParent;
HTREEITEM hInsertAfter;
union {
TVITEMEXA itemex;
TV_ITEMA item;
} DUMMYUNIONNAME;
} TVINSERTSTRUCTA, *LPTVINSERTSTRUCTA;
由定义可见,struct中是包含了item的,在item结构中,设置控件的各个属性、例如样式、有无边框、节点名称、节点图形等。之后,将item放入struct结构体中,再调用TVM_INSERTITEM API 即可编辑TreeView控件。
代码如下:
/* *********************************************
*功能:为treeview增加节点
*参数:hwndTV,TreeView控件句柄
LpszItem,节点的名字
hParent,父节点的句柄
*返回值:创建的节点句柄
**********************************************/
HTREEITEM AddItemToTree(
HWND hwndTV,
LPSTR lpszItem,
HTREEITEM hParent
)
{
TVITEM tParent;
TVINSERTSTRUCT tvins;
HTREEITEM hme;
//设置ITEM的参数
tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_DI_SETITEM | TVIF_PARAM;
tvi.pszText = lpszItem;
//填充STRUCT结构
tvins.item = tvi;
tvins.hInsertAfter = TVI_ROOT;
if (hParent == NULL)
{
tvins.hParent = TVI_ROOT;
}
else
{
tvins.hParent = hParent;
}
//调用关键的TreeView_InsertItem函数
hme = TreeView_InsertItem(hwndTV, &tvins);
return hme;
}
/* *********************************************
*功能:为treeview窗口增加若干个节点
*参数:hwndtv,treeview空间窗口句柄
**********************************************/
bool InitTreeViewItems(HWND hwndTV)
{
HTREEITEM hRoot = AddItemToTree(hwndTV, "input", NULL);
HTREEITEM hp = AddItemToTree(hwndTV, "document1", hRoot);
hp = AddItemToTree(hwndTV, "document2", hRoot);
return true;
}