树控件(CTreeCtrl)中的每个项都具有当前状态。 例如,可以选择、禁用、展开项等等。 在大多数情况下,树控件会自动设置项目的状态以反映用户操作,例如选择某一项。 但是,还可以使用 SetItemState 成员函数设置项的状态,并使用 GetItemState 成员函数检索项的当前状态。 有关项状态的完整列表,请参阅 Windows SDK 中的 Tree-View 控制常量 。
项的当前状态由 nState 参数指定。 树控件可能会更改项的状态以反映用户作,例如选择项目或将焦点设置为项目。 此外,应用程序可能会更改项的状态以禁用或隐藏该项或指定覆盖图像或状态图像。
指定或更改项的状态时, nStateMask 参数指定要设置的状态位, nState 参数包含这些位的新值。 例如,以下示例将对象(由 CTreeCtrl 指定的)m_treeCtrl父项的当前状态更改为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 以指定无状态图像。 有关覆盖和状态图像的详细信息,请参阅 树控件图像列表。