树控件项状态概述

树控件(CTreeCtrl)中的每个项都具有当前状态。 例如,可以选择项、禁用项、展开项等。 在大多数情况下,树控件会自动设置项的状态以反映用户作,例如选择项。 但是,还可以使用 SetItemState 成员函数设置项的状态,并使用 GetItemState 成员函数检索项的当前状态。 有关项状态的完整列表,请参阅 Windows SDK 中的 Tree-View 控制常量

项的当前状态由 nState 参数指定。 树控件可能会更改项的状态以反映用户作,例如选择项目或将焦点设置为项目。 此外,应用程序可能会更改项的状态以禁用或隐藏该项或指定覆盖图像或状态图像。

指定或更改项的状态时, nStateMask 参数指定要设置的状态位, nState 参数包含这些位的新值。 例如,以下示例将对象(m_treeCtrlhParentItem 指定的)CTreeCtrl父项的当前状态更改为TVIS_EXPANDPARTIAL

TVITEM curItem;
HTREEITEM hParentItem;

hParentItem = m_TreeCtrl.GetSelectedItem();

//modify the parent item to keep the '+' sign
curItem.mask = TVIF_STATE | TVIF_HANDLE;
curItem.hItem = hParentItem;
curItem.state = TVIS_EXPANDPARTIAL;
curItem.stateMask = TVIS_EXPANDPARTIAL;
m_TreeCtrl.SetItem(&curItem);

更改状态的另一个示例是设置项的覆盖图像。 为此, nStateMask 必须包含 TVIS_OVERLAYMASK 该值, nState 必须使用 INDEXTOOVERLAYMASK 宏包含覆盖图像左移 8 位的基于一的索引。 索引可以为 0 以指定无覆盖图像。 必须通过对 CImageList::SetOverlayImage 函数的上一次调用,将覆盖图像添加到树控件的覆盖图像列表中。 该函数指定要添加的图像的基于一个索引;这是用于 INDEXTOOVERLAYMASK 宏的索引。 树控件最多可以有四个覆盖图像。

若要设置项的状态图像, nStateMask 必须包含 TVIS_STATEIMAGEMASK 该值, nState 必须使用 INDEXTOSTATEIMAGEMASK 宏包含状态图像向左移动 12 位的基于一个索引的索引。 索引可以为 0 以指定无状态图像。 有关覆盖和状态图像的详细信息,请参阅 树控件图像列表

另请参阅

使用 CTreeCtrl
控件