按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
1.HTREEITEM 型句柄
在 Windows 中用 HTREEITEM 型句柄来代表树形视图的一项,通过 HTREEITEM 句柄
来区分和访问树形视图的各个项。
2 .TV_ITEM 结构
该结构用来描述一个表项,它包含了表项的各种属性,其定义如下:
typedef struct _TV_ITEM
{
UINT mask;
//包含一些屏蔽位(下面的括号中列出)的组合,用来表明结构的哪些成员是有效的
HTREEITEM hItem;
//表项的句柄(TVIF_HANDLE)
UINT state;
//表项的状态(TVIF_STATE)
UINT stateMask;
·136 ·
…………………………………………………………Page 146……………………………………………………………
第 5 章 常用控件
//状态的屏蔽组合(TVIF_STATE)
LPSTR pszText;
//表项的标题正文(TVIF_TEXT)
int cchTextMax;
//正文缓冲区的大小(TVIF_TEXT)
int iImage;
//表项的图像索引(TVIF_IMAGE)
int iSelectedImage;
//选中的项的图像索引(TVIF_SELECTEDIMAGE)
int cChildren;
//表明项是否有子项(TVIF_CHILDREN),为 1 则有,为 0 则没有
LPARAM lParam;
//一个 32 位的附加数据(TVIF_PARAM)
}TV_ITEM;FAR *LPTV_ITEM;
下面对上述参数进行解释。如果要使树形视图的表项显示图像,需要为树形视图建立一
个位图序列,这时,iImage 说明表项显示的图像在位图序列中的索引,iSelectedImage 则说明
了选中的表项应显示的图像,在绘制图标时,树形视图可以根据这两个参数提供的索引在位
图序列中找到对应的位图。lParam 可用来放置与表项相关的数据,这常常是很有用的。state
和 stateMask 的常用值在表 5…22 中列出,其中 stateMask 用来说明要获取或设置哪些状态。
表 5…22 列表视图的状态
状态 对应的状态屏蔽 含义
TVIS_SELECTED 同左 项被选中
TVIS_EXPANDED 同左 项的子项被展开
TVIS_EXPANDEDONCE 同左 项的子项曾经被展开过
TVIS_CUT 同左 项被选择用来进行剪切和粘贴操作
TVIS_FOCUSED 同左 项具有输入焦点
TVIS_DROPHILITED 同左 项成为拖动操作的目标
3 .TV_INSERTSTRUCT 结构
TV_INSERTSTRUCT 结构。在向树形视图中插入新项时要用到该结构,其定义如下:
typedef struct _TV_INSERTSTRUCT{
HTREEITEM hParent;
//父项的句柄
HTREEITEM hInsertAfter;
//说明应插入到同层中哪一项的后面
TV_ITEM item;
}TV_INSERTSTRUCT;
如果 hParent 的值为 TVI_ROOT 或 NULL ,那么新项将被插入到树形视图的最高层(根
位置)。hInsertAfter 的值可以是 TVI_FIRST、TVI_LAST 或 TVI_SORT,其含义分别是将新
项插入到同一层中的开头、最后或排序插入。
·137 ·
…………………………………………………………Page 147……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
4 .NM_TREEVIEW 结构
树形视图的大部分通知消息都会附带指向该结构的指针以提供一些必要的信息 。该结构
的定义如下:
typedef struct _NM_TREEVIEW {
NMHDR hdr;
//标准的 NMHDR 结构
UINT action;
//表明是用户的什么行为触发了该通知消息
TV_ITEM itemOld;
// 旧项的信息
TV_ITEM itemNew;
//新项的信息
POINT ptDrag;
//事件发生时鼠标的客户区坐标
}NM_TREEVIEW;
5 .TV_KEYDOWN 结构
提供与键盘事件有关的信息。该结构的定义如下:
typedef struct _TV_KEYDOWN {
NMHDR hdr;
//标准的 NMHDR 结构
WORD wVKey;
//虚拟键盘码
UINT flags;
//为 0
}TV_KEYDOWN;
6 .TV_DISPINFO 结构
提供与表项的显示有关的信息。该结构的定义如下:
typedef struct _TV_DISPINFO {
NMHDR hdr;
TV_ITEM item;
}TV_DISPINFO;
MFC 的 CTreeCtrl 类封装了树形视图。该类的 Create 成员函数负责控件的创建,该函数
的声明如下:
BOOL Create(DWORD dwStyle; const RECT& rect;CWnd* pParentWnd;UINT nID);
其中参数 dwStyle 是如表 5…23 所示的控件风格的组合。
·138 ·
…………………………………………………………Page 148……………………………………………………………
第 5 章 常用控件
表 5…23 树型控件风格
控件风格 含义
TVS_HASLINES 在父项与子项间连线以清楚地显示结构
TVS_LINESATROOT 只在根部画线
TVS_HASBUTTONS 显示带有"+ "或""的小方框来表示某项能否被展开或已展开
TVS_EDITLABELS 用户可以编辑表项的标题
TVS_SHOWSELALWAYS 即使控件失去输入焦点,仍显示出项的选择状态
TVS_DISABLEDRAGDROP 不支持拖动操作
除上表的风格外,一般还要指定 WS_CHILD 和 WS_VISIBLE 窗口风格。对于用对话框
模板创建的树形视图控件,可以在控件的属性对话框中指定上表中列出的控件风格。例如,
在属性对话框中选择 Has buttons ,相当于指定了 TVS_HASBUTTONS 风格。
5。9。2 CtreeCtrl 类的主要成员函数
CTreeCtrl 类提供了大量的成员函数。对于常用的函数,下面结合实际应用进行介绍。
1.SetImageList()函数
向树形视图中插入新的表项。首先应提供一个 TV_INSERTSTRUCT 结构并在该结构中
对插入项进行描述 。如果要在树形视图中显示图像,则应该先创建一个 CImageList 对象并使
该对象包含一个位图序列,然后调用 SetImageList 为树形视图设置位图序列。最后调用
InsertItem 函数把新项插入到树形视图中。该函数的声明如下:
CImageList* SetImageList(CImageList * pImageList;int nImageListType);
参数pImageList 指向一个CImageList 对象,参数nImageListType 一般应为TVSIL_NORMAL。
2 .InsertItem()函数
该成员函数声明如下:
HTREEITEM InsertItem( LPTV_INSERTSTRUCT lpInsertStruct );
参数 lpInsertStruct 指向一个 TV_INSERTSTRUCT 结构。函数返回新插入项的句柄。
3 .DeleteItem()和 DeleteAllItems() 函数
用 DeleteItem() 函数来删除指定项,用 DeleteAllItems() 函数删除所有项。函数的声明如下:
BOOL DeleteItem(HTREEITEM hItem);
BOOL DeleteAllItems();
操作成功则函数返回 TRUE,否则返回 FALSE 。
4 .Expand() 函数
树形视图控件会根据用户的输入自动展开或折叠子项 。但有时需要在程序中展开或折叠
指定项,则应该调用 Expand ,该函数的声明为
BOOL Expand(HTREEITEM hItem;UINT nCode);
参数 hItem 指定了要展开或折叠的项。参数 nCode 是一个标志,指定了函数应执行的操
作,它可以是 TVE_COLLAPSE (折叠)、TVE_COLLAPSERESET(折叠并移走所有的子项 )、
·139 ·
…………………………………………………………Page 149……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
TVE_EXPAND (展开)或TVE_TOGGLE (在展开和折叠状态之间翻转)。
5 .GetSelectedItem()和 SelectItem()函数
要查询或设置选择项,应调用 GetSelectedItem 或 SelectItem。函数的声明如下:
HTREEITEM GetSelectedItem();
BOOL SelectItem(HTREEITEM hItem);
6 .GetItem()和 SetItem()函数
要查询或设置指定的项,可调用 GetItem()和 SetItem()函数。用这两个函数,几乎可以查
询和设置项的所有属性,包括表项的正文、图像及选择状态。函数的声明如下:
BOOL GetItem(TV_ITEM* pItem);
BOOL SetItem(TV_ITEM* pItem);
参数 pItem 是指向 TV_ITEM 结构的指针,函数通过该结构来查询或设置指定的项,在
调用函数前应该使该结构的 hItem 成员有效以指定表项。CtreeCtrl 类还提供了一系列