在这里,你可以获得以下信息:
1. CTreeCtrl 样式及设置
2. 扩展样式设置
3. 数据插入
CTreeCtrl控件
+CObject
+CCmdTarget
+CWnd
+CTreeCtrl
1. CTreeCtrl 样式及设置
LONG lStyle;
lStyle=GetWindowLong(m_TreeCtrl.m_hWnd, GWL_STYLE); //获取当前窗口style
lStyle &= ~LVS_TYPEMASK; //清除显示方式位
lStyle |= TVS_HASBUTTONS //有按钮(+-号)
|TVS_HASLINES //线条
|TVS_LINESATROOT //根部线
|TVS_CHECKBOXES; //单选框
SetWindowLong(m_TreeCtrl.m_hWnd, GWL_STYLE, lStyle);
3. 数据插入
//直插
CString str;
HTREEITEM hRootItem;
hRootItem=m_TreeCtrl.InsertItem("Root");
for(int i=0; i<8; i++)
{
str.Format("Item %d", i);
m_TreeCtrl.InsertItem(str,-1,-1,hRootItem); //插入在 Root 下
}
//TVINSERTSTRUCT 结构插法
TVITEM tvItem;
tvItem.mask=TVIF_TEXT;
tvItem.pszText="Item by TVITEM";
TVINSERTSTRUCT tvstruct;
tvstruct.hParent=m_TreeCtrl.InsertItem("Root-2");
tvstruct.hInsertAfter=TVI_FIRST; //TVI_ROOT;
tvstruct.item=tvItem; //做为一个参数传递
m_TreeCtrl.InsertItem(&tvstruct);
//---------------------相关信息-----------------------------
Header:这3个结构定义在commctrl.h
//TVINSERTSTRUCT 结构
typedef struct tagTVINSERTSTRUCT {
HTREEITEM hParent; //父项的句柄。值为TVI_ROOT或NULL时,该项作为根插入。
HTREEITEM hInsertAfter; //插入的新项之后的项的句柄。或是下列值之一,详情见 注1
#if (_WIN32_IE >= 0x0400)
union
{
TVITEMEX itemex;
TVITEM item; //包含关于项添加的信息
} DUMMYUNIONNAME;
#else
TVITEM item;
#endif
} TVINSERTSTRUCT, FAR *LPTVINSERTSTRUCT;
//TVITEM 结构
typedef struct tagTVITEM
{
UINT mask; //包含有效数据的标记数组,详情见 注2
HTREEITEM hItem; //该函数引用的项
UINT state; //位标记和图像列表索引的设置,指出项的状态
UINT stateMask; //设置状态图像索引用INDEXTOSTATEIMAGEMASK,没有状态图像设置索引为0
LPTSTR pszText; //指向一个以空字符结束的字符串
int cchTextMax; //pszText成员指定缓冲的大小,以字符为单位
int iImage; //当项是在非选择状态中时,是树形控件的图像列表的索引
int iSelectedImage; //当项被选择时,是树形控件图像列表的索引。
int cChildren; //标记指出哪一个项有关联的子项
LPARAM lParam; //与这项相关的32位值
} TVITEM, FAR *LPTVITEM;
//NMTREEVIEW 结构
typedef struct tagNMTREEVIEW {
NMHDR hdr; //NMHDR结构,包含了关于这个通知消息的信息
UINT action; //通知指定的动作标记
TVITEM itemOld; //包含关于旧项状态信息的TVITEM结构。通知消息没有使用它时,这个成员为0
TVITEM itemNew; //包含关于新项状态信息的TVITEM结构。通知消息没有使用它时,这个成员为0
POINT ptDrag; //包含引起通知消息发送的事件信息的POINT结构
} NMTREEVIEW, FAR *LPNMTREEVIEW;
注1: (TVINSERTSTRUCT { HTREEITEM hInsertAfter; ... } )
TVI_FIRST 在列表的开始插入项
TVI_LAST 在列表的最后插入项
TVI_ROOT 作为一个根项添加
TVI_SORT 以字母顺序插入项
注2: (TVITEM { UINT mask; ... } )
指出其它的结构成员哪些包含有效数据的标记数组。当这个结构被TVM_GETITEM消息使用时,mask成员指出项的属性被取回。这个成员可以是下列值的一个或多个。
TVIF_CHILDREN cChildren成员是有效的。
TVIF_DI_SETITEM 树形视控件将保留支持信息并且不重新请求它。当处理TVN_GETDISPINF通知时,这个标记是有效的。
TVIF_HANDLE hItem成员有效。
TVIF_IMAGE iImage成员有效。
TVIF_PARAM lParam成员有效。
TVIF_SELECTEDIMAGE iSelectedImage成员有效。
TVIF_STATE state和stateMask成员有效。
TVIF_TEXT pszText和cchTextMax成员有效。