树控件项状态概述
树控件 (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 以表示没有状态图像。 有关覆盖图像和状态图像的详细信息,请参阅树控件图像列表。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈