树控件项状态概述

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

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

在指定或更改项的状态时,nStateMask 参数指定要设置的状态位,而 nState 参数包含这些位的新值。 例如,以下示例将 CTreeCtrl 对象 (m_treeCtrl) 中父项(由 hParentItem 指定)的当前状态更改为 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 位的基于 1 的索引。 索引可以为 0 以表示没有覆盖图像。 必须通过对 CImageList::SetOverlayImage 函数的上一次调用,将覆盖图像添加到树控件的覆盖图像列表中。 该函数指定要添加图像的基于 1 的索引;这是与 INDEXTOOVERLAYMASK 宏一起使用的索引。 一个树控件最多可拥有四个覆盖图像。

若要设置项的状态图像,nStateMask 必须包含 TVIS_STATEIMAGEMASK 值,并且 nState 必须通过使用 INDEXTOSTATEIMAGEMASK 宏包含状态图像左移 12 位的基于 1 的索引。 索引可以为 0 以表示没有状态图像。 有关覆盖图像和状态图像的详细信息,请参阅树控件图像列表

另请参阅

使用 CTreeCtrl
控件