CTreeCtrl

提供 Windows 公共树视图控件的功能。

语法

class CTreeCtrl : public CWnd

成员

公共构造函数

名称 描述
CTreeCtrl::CTreeCtrl 构造 CTreeCtrl 对象。

公共方法

名称 描述
CTreeCtrl::Create 创建树视图控件并将其附加到 CTreeCtrl 对象。
CTreeCtrl::CreateDragImage 为指定的树视图项创建拖动位图。
CTreeCtrl::CreateEx 创建具有指定 Windows 扩展样式的树控件,并将其附加到 CTreeCtrl 对象。
CTreeCtrl::DeleteAllItems 删除树视图控件中的所有项。
CTreeCtrl::DeleteItem 删除树视图控件中的某个新项。
CTreeCtrl::EditLabel 就地编辑指定的树视图项。
CTreeCtrl::EndEditLabelNow 取消当前树视图控件中对树视图项标签的编辑操作。
CTreeCtrl::EnsureVisible 确保树视图项在其树视图控件中可见。
CTreeCtrl::Expand 展开或折叠指定树视图项的子项。
CTreeCtrl::GetBkColor 检索控件的当前背景色。
CTreeCtrl::GetCheck 检索树控件项的选中状态。
CTreeCtrl::GetChildItem 检索指定树视图项的子级。
CTreeCtrl::GetCount 检索与树视图控件关联的树项数。
CTreeCtrl::GetDropHilightItem 检索拖放操作的目标。
CTreeCtrl::GetEditControl 检索用于编辑指定树视图项的编辑控件的句柄。
CTreeCtrl::GetExtendedStyle 检索当前树视图控件正在使用的扩展样式。
CTreeCtrl::GetFirstVisibleItem 检索指定树视图项的第一个可见项。
CTreeCtrl::GetImageList 检索与树视图控件关联的图像列表的句柄。
CTreeCtrl::GetIndent 检索树视图项与其父级之间的偏移量(以像素为单位)。
CTreeCtrl::GetInsertMarkColor 检索用于绘制树视图的插入标记的颜色。
CTreeCtrl::GetItem 检索指定树视图项的属性。
CTreeCtrl::GetItemData 返回与项关联的特定于应用程序的值。
CTreeCtrl::GetItemExpandedImageIndex 检索在当前树视图控件的指定项处于展开状态时要显示的图像的索引。
CTreeCtrl::GetItemHeight 检索树视图项的当前高度。
CTreeCtrl::GetItemImage 检索与项关联的图像。
CTreeCtrl::GetItemPartRect 检索当前树视图控件中指定项的指定部分的边框。
CTreeCtrl::GetItemRect 检索树视图项的边框。
CTreeCtrl::GetItemState 返回项的状态。
CTreeCtrl::GetItemStateEx 检索当前树视图控件中指定项的扩展状态。
CTreeCtrl::GetItemText 返回项的文本。
CTreeCtrl::GetLastVisibleItem 检索当前树视图控件中最后的扩展项。
CTreeCtrl::GetLineColor 检索树视图控件的当前线条颜色。
CTreeCtrl::GetNextItem 检索与指定关系匹配的下一个树视图项。
CTreeCtrl::GetNextSiblingItem 检索指定树视图项的下一个同级。
CTreeCtrl::GetNextVisibleItem 检索指定树视图项的下一个可见项。
CTreeCtrl::GetParentItem 检索指定树视图项的父级。
CTreeCtrl::GetPrevSiblingItem 检索指定树视图项的前一个同级。
CTreeCtrl::GetPrevVisibleItem 检索指定树视图项的前一个可见项。
CTreeCtrl::GetRootItem 检索指定树视图项的根。
CTreeCtrl::GetScrollTime 检索树视图控件的最大滚动时间。
CTreeCtrl::GetSelectedCount 检索当前树视图控件中已选定的项的数目。
CTreeCtrl::GetSelectedItem 检索当前已选定的树视图项。
CTreeCtrl::GetTextColor 检索控件的当前文本颜色。
CTreeCtrl::GetToolTips 检索树视图控件使用的子 ToolTip 控件的句柄。
CTreeCtrl::GetVisibleCount 检索与树视图控件关联的可见树项数。
CTreeCtrl::HitTest 返回与 CTreeCtrl 对象相关的游标的当前位置。
CTreeCtrl::InsertItem 在树视图控件中插入某个新项。
CTreeCtrl::ItemHasChildren 如果指定项具有子项,则返回非零值。
CTreeCtrl::MapAccIdToItem 将指定的辅助功能标识符映射到当前树视图控件中的树视图项的句柄。
CTreeCtrl::MapItemToAccID 将当前树视图控件中的树视图项的指定句柄映射到辅助功能标识符。
CTreeCtrl::Select 选择、滚动到视图中,或重新绘制指定的树视图项。
CTreeCtrl::SelectDropTarget 将树项重新绘制为拖放操作的目标。
CTreeCtrl::SelectItem 选择指定的树视图项。
CTreeCtrl::SelectSetFirstVisible 选择指定的树视图项作为第一个可见项。
CTreeCtrl::SetAutoscrollInfo 设置当前树视图控件的自动注册速率。
CTreeCtrl::SetBkColor 设置控件的背景色。
CTreeCtrl::SetCheck 设置树控件项的选中状态。
CTreeCtrl::SetExtendedStyle 设置当前树视图控件的扩展样式。
CTreeCtrl::SetImageList 设置与树视图控件关联的图像列表的句柄。
CTreeCtrl::SetIndent 设置树视图项与其父级之间的偏移量(以像素为单位)。
CTreeCtrl::SetInsertMark 设置树视图控件中的插入标记。
CTreeCtrl::SetInsertMarkColor 设置用于绘制树视图的插入标记的颜色。
CTreeCtrl::SetItem 设置指定树视图项的属性。
CTreeCtrl::SetItemData 设置与项关联的特定于应用程序的值。
CTreeCtrl::SetItemExpandedImageIndex 设置在当前树视图控件的指定项处于展开状态时要显示的图像的索引。
CTreeCtrl::SetItemHeight 设置树视图项的高度。
CTreeCtrl::SetItemImage 将图像与项相关联。
CTreeCtrl::SetItemState 设置项的状态。
CTreeCtrl::SetItemStateEx 设置当前树视图控件中指定项的扩展状态。
CTreeCtrl::SetItemText 设置项的文本。
CTreeCtrl::SetLineColor 设置树视图控件的当前线条颜色。
CTreeCtrl::SetScrollTime 设置树视图控件的最大滚动时间。
CTreeCtrl::SetTextColor 或设置控件的文本颜色。
CTreeCtrl::SetToolTips 设置树视图控件的子 ToolTip 控件。
CTreeCtrl::ShowInfoTip 显示当前树视图控件中指定项的信息提示。
CTreeCtrl::SortChildren 对给定父项的子级进行排序。
CTreeCtrl::SortChildrenCB 使用应用程序定义的排序函数对给定父项的子级进行排序。

备注

“树视图控件”是显示项(如文档中的标题、索引中的条目和磁盘上的文件和目录)的分层列表的窗口。 每个项包含一个标签和一个可选位图图像,且每个项可以有一个与之关联的子项列表。 通过单击项,用户可以展开和折叠关联的子项列表。

此控件(因此决定 CTreeCtrl 类)仅适用于在 Windows 98 和 Windows NT 版本 4 及更高版本下运行的程序。

有关使用 CTreeCtrl 的详细信息,请参阅:

继承层次结构

CObject

CCmdTarget

CWnd

CTreeCtrl

要求

标头afxcmn.h

CTreeCtrl::Create

如果在对话框模板中指定树控件,或者正在使用 CTreeView,则创建对话框或视图时会自动创建树控件。

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

参数

dwStyle
指定树视图控件的样式。 应用窗口样式(如 CreateWindow 中所述),以及任意组合的树视图控件样式(如 Windows SDK 中所述)。

rect
指定树视图控件的大小和位置。 它可以是 CRect 对象或 RECT 结构。

pParentWnd
指定树视图控件的父窗口,通常为 CDialog。 不得为 NULL

nID
指定树视图控件的 ID。

返回值

如果初始化成功,则返回非零值;否则返回 0。

注解

如果要将树控件创建为其他窗口的子窗口,请使用 Create 成员函数。 如果使用 Create 创建树控件,则除了其他树视图样式外,还必须传递 WS_VISIBLE

分两步构建 CTreeCtrl。 首先,调用构造函数,然后调用 Create,这将创建树视图控件并将其附加到 CTreeCtrl 对象。

若要创建具有扩展窗口样式的树控件,请调用 CreateEx(而不是 Create)。

示例

// Assuming your window has a CTreeCtrl member named m_TreeCtrl,
// you can create the tree control window with a child ID of ID_MYTREE
// using a call like this:

m_TreeCtrl.Create(WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER |
                      TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES |
                      TVS_DISABLEDRAGDROP | TVS_NOTOOLTIPS | TVS_EDITLABELS,
                  CRect(10, 10, 300, 100), this, ID_MYTREE);

// The control will have the appropriate window styles, and the tree
// control styles specified are those most commonly used.

CTreeCtrl::CreateEx

调用此函数可以创建控件(子窗口)并将其与 CTreeCtrl 对象相关联。

virtual BOOL CreateEx(
    DWORD dwExStyle,
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

参数

dwExStyle
指定要创建的控件的扩展样式。 有关扩展 Windows 样式的列表,请参阅 Windows SDK 中 CreateWindowExdwExStyle 参数。

dwStyle
指定树视图控件的样式。 应用窗口样式(如 CreateWindow 中所述),以及任意组合的树视图控件样式(如 Windows SDK 中所述)。

rect
RECT 结构的引用,该结构描述了要在客户端坐标 pParentWnd 中创建的窗口的大小和位置。

pParentWnd
指向作为控件父级的窗口的指针。

nID
控件的子窗口 ID。

返回值

如果成功,则不为 0,否则为 0。

备注

使用 CreateEx(而不是 Create)应用由 Windows 扩展样式前缀 WS_EX_ 指定的扩展 Windows 样式。

CTreeCtrl::CreateDragImage

调用此函数可为树视图控件中的给定项创建拖动位图、为位图创建图像列表并将位图添加到图像列表中。

CImageList* CreateDragImage(HTREEITEM hItem);

参数

hItem
要拖动的树项的句柄。

返回值

如果成功,则返回指向已向其添加拖动位图的图像列表的指针;否则返回 NULL

备注

应用程序使用图像列表函数在项被拖动时显示图像。

CImageList 对象是永久性的,必须在完成后将其删除。 例如:

HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();

CImageList *pImageList = m_TreeCtrl.CreateDragImage(hItem);

// Do something with the image list.

delete pImageList;

CTreeCtrl::CTreeCtrl

构造 CTreeCtrl 对象。

CTreeCtrl();

CTreeCtrl::DeleteAllItems

调用此函数可删除树视图控件中的所有项。

BOOL DeleteAllItems();

返回值

如果成功,则不为 0;否则为 0。

示例

// The underlying Windows API always returns TRUE
VERIFY(m_TreeCtrl.DeleteAllItems());

CTreeCtrl::DeleteItem

调用此函数可从树视图控件中删除某一项。

BOOL DeleteItem(HTREEITEM hItem);

参数

hItem
要删除的树项的句柄。 如果 hitem 具有 TVI_ROOT 值,则从树视图控件中删除所有项。

返回值

如果成功,则不为 0;否则为 0。

示例

// Look at all of the root-level items
HTREEITEM hCurrent = m_TreeCtrl.GetChildItem(TVI_ROOT);
while (hCurrent != NULL)
{
   // Get the text for the item. Notice we use TVIF_TEXT because
   // we want to retrieve only the text, but also specify TVIF_HANDLE
   // because we're getting the item by its handle.
   TVITEM item;
   TCHAR szText[1024];
   item.hItem = hCurrent;
   item.mask = TVIF_TEXT | TVIF_HANDLE;
   item.pszText = szText;
   item.cchTextMax = 1024;

   BOOL bWorked = m_TreeCtrl.GetItem(&item);

   // Try to get the next item
   hCurrent = m_TreeCtrl.GetNextItem(hCurrent, TVGN_NEXT);

   // If we successfuly retrieved an item, and the item's text
   // contains a lowercase letter 'e', delete the item.
   if (bWorked && _tcschr(item.pszText, 'e'))
      m_TreeCtrl.DeleteItem(item.hItem);
}

CTreeCtrl::EditLabel

调用此函数,可开始对指定项的文本进行就地编辑。

CEdit* EditLabel(HTREEITEM hItem);

参数

hItem
要编辑的树项的句柄。

返回值

如果成功,则返回指向用于编辑项文本的 CEdit 对象的指针;否则返回 NULL

备注

此编辑是通过将项的文本替换为包含文本的单行编辑控件来完成的。

示例

// Make sure the focus is set to the tree control.
m_TreeCtrl.SetFocus();

// Show the edit control on the label of the selected item.
// The tree control must have the TVS_EDITLABELS style set.
HTREEITEM hSel = m_TreeCtrl.GetSelectedItem();
CEdit *pmyEdit = m_TreeCtrl.EditLabel(hSel);
ASSERT(pmyEdit != NULL);

CTreeCtrl::EndEditLabelNow

结束当前树视图控件中对树视图项标签的编辑操作。

BOOL EndEditLabelNow(BOOL fCancelWithoutSave);

参数

fCancelWithoutSave
[in] 若为 TRUE,则在结束编辑操作之前放弃对树视图项的更改;若为 FALSE,则在结束操作之前保存对树视图项所做的更改。

返回值

如果此方法成功,则为 TRUE;否则为 FALSE

备注

此方法将发送 TVM_ENDEDITLABELNOW 消息,如 Windows SDK 中所述。

CTreeCtrl::EnsureVisible

调用此函数以确保树视图项可见。

BOOL EnsureVisible(HTREEITEM hItem);

参数

hItem
设为可见状态的树项的句柄。

返回值

如果系统滚动树视图控件中的项以确保指定的项可见,则返回 TRUE。 否则,返回值为 FALSE

备注

如有必要,该函数将展开父项或滚动树视图控件,以便该项可见。

示例

HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
// hmyItem is the item that I want to ensure is visible.
HTREEITEM hmyItem = m_TreeCtrl.GetChildItem(hItem);

// Expand the parent, if possible.
HTREEITEM hParent = m_TreeCtrl.GetParentItem(hmyItem);
if (hParent != NULL)
   m_TreeCtrl.Expand(hParent, TVE_EXPAND);

// Ensure the item is visible.
m_TreeCtrl.EnsureVisible(hmyItem);

CTreeCtrl::Expand

调用此函数可展开或折叠与给定父项关联的子项(如果有)列表。

BOOL Expand(
    HTREEITEM hItem,
    UINT nCode);

参数

hItem
正在展开的树项的句柄。

nCode
指示要执行的操作类型的标志。 此标志的值可为以下之一:

  • TVE_COLLAPSE 折叠列表。

  • TVE_COLLAPSERESET 折叠列表并删除子项。 已重置 TVIS_EXPANDEDONCE 状态标志。 此标志必须与 TVE_COLLAPSE 标志一起使用。

  • TVE_EXPAND 展开列表。

  • TVE_TOGGLE 如果列表当前处于展开状态,则折叠列表;如果列表当前处于折叠状态,则展开列表。

返回值

如果成功,则不为 0;否则为 0。

示例

请参阅 CTreeCtrl::EnsureVisible 的示例。

CTreeCtrl::GetBkColor

此成员函数实现 Win32 消息 TVM_GETBKCOLOR 的行为,如 Windows SDK 中所述。

COLORREF GetBkColor() const;

返回值

一个 COLORREF 值,表示控件的当前窗口背景色。 如果此值为 -1,则表示控件使用系统窗口颜色。 在这种情况下,可以使用 ::GetSysColor(COLOR_WINDOW) 获取控件正在使用的当前系统颜色。

示例

请参阅 CTreeCtrl::SetTextColor 的示例。

CTreeCtrl::GetCheck

调用此成员函数以检索某项的选中状态。

BOOL GetCheck(HTREEITEM hItem) const;

参数

hItem
指示状态信息接收对象的 HTREEITEM

返回值

如果树控件项被选中,则返回非零值;否则为 0。

示例

请参阅 CTreeCtrl::SetCheck 的示例。

CTreeCtrl::GetChildItem

调用此函数以检索树视图项,该项是由 hItem 指定的项的子级。

HTREEITEM GetChildItem(HTREEITEM hItem) const;

参数

hItem
树项的句柄。

返回值

如果成功,则返回子项的句柄;否则返回 NULL

示例

HTREEITEM hmyItem = m_TreeCtrl.GetSelectedItem();

// Delete all of the children of hmyItem.
if (m_TreeCtrl.ItemHasChildren(hmyItem))
{
   HTREEITEM hNextItem;
   HTREEITEM hChildItem = m_TreeCtrl.GetChildItem(hmyItem);

   while (hChildItem != NULL)
   {
      hNextItem = m_TreeCtrl.GetNextItem(hChildItem, TVGN_NEXT);
      m_TreeCtrl.DeleteItem(hChildItem);
      hChildItem = hNextItem;
   }
}

CTreeCtrl::GetCount

调用此函数以检索树视图控件中的项计数。

UINT GetCount() const;

返回值

树视图控件中的项数。

示例

// Delete all of the items from the tree control.
m_TreeCtrl.DeleteAllItems();
ASSERT(m_TreeCtrl.GetCount() == 0);

CTreeCtrl::GetDropHilightItem

调用此函数以检索作为拖放操作目标的项。

HTREEITEM GetDropHilightItem() const;

返回值

如果成功,则返回放置的项的句柄;否则返回 NULL

示例

// Set the item at the point myPoint as the drop target.
UINT uFlags;
HTREEITEM hItem = m_TreeCtrl.HitTest(myPoint, &uFlags);

if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
{
   m_TreeCtrl.SelectDropTarget(hItem);
   ASSERT(m_TreeCtrl.GetDropHilightItem() == hItem);
}

CTreeCtrl::GetEditControl

调用此函数以检索用于编辑树视图项文本的编辑控件的句柄。

CEdit* GetEditControl() const;

返回值

如果成功,则返回指向用于编辑项文本的编辑控件的指针;否则返回 NULL

示例

// The string replacing the text in the edit control.
LPCTSTR lpszmyString = _T("New text!");

// Replace the text in the label edit control, if possible.
CEdit *pEdit = m_TreeCtrl.GetEditControl();

if (pEdit != NULL)
{
   pEdit->SetWindowText(lpszmyString);
}

CTreeCtrl::GetExtendedStyle

检索当前树视图控件正在使用的扩展样式。

DWORD GetExtendedStyle() const;

返回值

包含当前树视图控件扩展样式的按位组合 (OR) 的值。 有关详细信息,请参阅树视图控件扩展样式

注解

此方法将发送 TVM_GETEXTENDEDSTYLE 消息,如 Windows SDK 中所述。

CTreeCtrl::GetFirstVisibleItem

调用此函数以检索树视图控件的第一个可见项。

HTREEITEM GetFirstVisibleItem() const;

返回值

第一个可见项的句柄;否则为 NULL

示例

请参阅 CTreeCtrl::SetCheck 的示例。

CTreeCtrl::GetImageList

调用此函数以检索与树视图控件关联的普通或状态图像列表的句柄。

CImageList* GetImageList(UINT nImageList) const;

参数

nImageList
要检索的图像列表的类型。 图像列表可以是以下值之一:

  • TVSIL_NORMAL 检索普通图像列表,该列表包含树视图项的选定图像和非选定图像。

  • TVSIL_STATE 检索状态图像列表,其中包含处于用户定义的状态的树视图项的图像。

返回值

如果成功,则返回指向控件的图像列表的指针;否则返回 NULL

备注

树视图控件中的每个项都可有一对与之关联的位图图像。 选中项时会显示一个图像,未选定项时显示另一个图像。 例如,选中项时,该项可能显示一个打开的文件夹;未选定项时,该项可能显示一个关闭的文件夹。

有关图像列表的详细信息,请参阅 CImageList 类。

示例

ASSERT(m_TreeCtrl.GetImageList(TVSIL_NORMAL) == NULL);

m_TreeCtrl.SetImageList(&m_TreeImages, TVSIL_NORMAL);
ASSERT(m_TreeCtrl.GetImageList(TVSIL_NORMAL) == &m_TreeImages);

CTreeCtrl::GetIndent

调用此函数以检索子项相对于其父项缩进的量(以像素为单位)。

UINT GetIndent() const;

返回值

以像素为单位的缩进量。

示例

// Double the indent.
UINT uIndent = m_TreeCtrl.GetIndent();
m_TreeCtrl.SetIndent(2 * uIndent);

CTreeCtrl::GetInsertMarkColor

此成员函数实现 Win32 消息 TVM_GETINSERTMARKCOLOR 的行为,如 Windows SDK 中所述。

COLORREF GetInsertMarkColor() const;

返回值

一个 COLORREF 值,该值包含当前插入标记颜色。

示例

// Use the highliight color for the insert mark color.
COLORREF crColor = ::GetSysColor(COLOR_HIGHLIGHT);
m_TreeCtrl.SetInsertMarkColor(crColor);
ASSERT(m_TreeCtrl.GetInsertMarkColor() == crColor);

CTreeCtrl::GetItem

调用此函数以检索指定树视图项的属性。

BOOL GetItem(TVITEM* pItem) const;

参数

pItem
指向 TVITEM 结构的指针,如 Windows SDK 中所述。

返回值

如果成功,则不为 0;否则为 0。

示例

请参阅 CTreeCtrl::DeleteItem 的示例。

CTreeCtrl::GetItemData

调用此函数以检索与指定项关联的特定于应用程序的值。

DWORD_PTR GetItemData(HTREEITEM hItem) const;

参数

hItem
将检索其数据的项的句柄。

返回值

与由 hItem 指定的项关联的指针大小应用程序特定值。

示例

HTREEITEM hmyItem = m_TreeCtrl.GetSelectedItem();

// Delete all of the children of hmyItem whose item data is
// not equal to zero.
if (m_TreeCtrl.ItemHasChildren(hmyItem))
{
   HTREEITEM hNextItem;
   HTREEITEM hChildItem = m_TreeCtrl.GetChildItem(hmyItem);

   while (hChildItem != NULL)
   {
      hNextItem = m_TreeCtrl.GetNextItem(hChildItem, TVGN_NEXT);

      if (m_TreeCtrl.GetItemData(hChildItem) != 0)
      {
         m_TreeCtrl.DeleteItem(hChildItem);
      }

      hChildItem = hNextItem;
   }
}

CTreeCtrl::GetItemExpandedImageIndex

检索在当前树视图控件的指定项处于展开状态时要显示的图像的索引。

int GetItemExpandedImageIndex(HTREEITEM hItem)const;

参数

hItem
[in] 树视图控件项的句柄。

返回值

当指定项处于展开状态时要显示的图像的索引。

注解

此方法将发送 TVM_GETITEM 消息,如 Windows SDK 中所述。 该消息返回描述树视图控件项的 TVITEMEX 结构,然后此方法从该结构中检索 iExpandedImage 成员。

CTreeCtrl::GetItemHeight

此成员函数实现 Win32 消息 TVM_GETITEMHEIGHT 的行为,如 Windows SDK 中所述。

SHORT GetItemHeight() const;

返回值

获取项的高度(以像素为单位)。

示例

// Double the height of the items.
SHORT sHeight = m_TreeCtrl.GetItemHeight();
m_TreeCtrl.SetItemHeight(2 * sHeight);

CTreeCtrl::GetItemImage

树视图控件中的每个项都可有一对与之关联的位图图像。

BOOL GetItemImage(
    HTREEITEM hItem,
    int& nImage,
    int& nSelectedImage) const;

参数

hItem
将检索其图像的项的句柄。

nImage
一个整数,用于在树视图控件的图像列表中接收项图像的索引。

nSelectedImage
一个整数,用于在树视图控件的图像列表中接收项的所选图像的索引。

返回值

如果成功,则不为 0;否则为 0。

备注

图像显示在项标签的左侧。 选中项时会显示一个图像,未选定项时显示另一个图像。 例如,选中项时,该项可能显示一个打开的文件夹;未选定项时,该项可能显示一个关闭的文件夹。

调用此函数可在树视图控件的图像列表中检索项图像及其所选图像的索引。

示例

HTREEITEM hmyItem = m_TreeCtrl.GetSelectedItem();

// If the selected image is the same as the nonselected image
// then make the selected image one more than the nonselected image.
if (m_TreeCtrl.ItemHasChildren(hmyItem))
{
   HTREEITEM hItem = m_TreeCtrl.GetChildItem(hmyItem);
   int nImage, nSelectedImage;

   while (hItem != NULL)
   {
      m_TreeCtrl.GetItemImage(hItem, nImage, nSelectedImage);

      if (nImage == nSelectedImage)
      {
         m_TreeCtrl.SetItemImage(hItem, nImage, nImage + 1);
      }

      hItem = m_TreeCtrl.GetNextSiblingItem(hItem);
   }
}

CTreeCtrl::GetItemPartRect

检索当前树视图控件中指定项的指定部分的边框。

BOOL GetItemPartRect(
    HTREEITEM hItem,
    int nPart,
    LPRECT lpRect)const;

参数

hItem
[in] 树视图控件项的句柄。

nPart
[in] 部件的标识符。 必须设置为 TVGIPR_BUTTON

lpRect
[out] 指向 RECT 结构的指针。 如果此方法成功,则结构接收部件的矩形坐标(由 hItemnPart 指定)。

返回值

如果此方法成功,则为 TRUE;否则为 FALSE

注解

每个树控件项都以绘制的矩形为边界。 每当单击该矩形中的某个点时,就算是点击到了该项。 此方法返回最大的矩形,可在单击矩形中的某个点时命中 hItem 参数标识的项。

此方法将发送 TVM_GETITEMPARTRECT 消息,如 Windows SDK 中所述。 有关更多信息,请参见 TreeView_GetItemPartRect 宏。

示例

第一个代码示例定义一个变量 m_treeCtrl,它用于访问当前树视图控件。 该代码示例还定义了一个无符号整数和多个 HTREEITEM 变量。 这些变量用于下一示例。

public:
// Variable to access tree control.
CTreeCtrl m_treeCtrl;
// Variable to access splitbutton control.
CSplitButton m_splitbutton;
// Accessibility identifier
UINT accIdUS;
// HTREEITEMs
HTREEITEM hCountry;
HTREEITEM hPA;
HTREEITEM hWA;

下一个代码示例使用辅助功能标识符和 CTreeCtrl::MapAccIdToItem 方法检索根树视图项的句柄。 然后,该示例使用句柄和 CTreeCtrl::GetItemPartRect 方法在该项周围绘制三维矩形。 在代码示例的前面部分中(未展示),我们创建了一个树视图,其中包含美国根国家/地区节点、宾夕法尼亚州和华盛顿州子节点以及这些州的城市树项。 我们使用 CTreeCtrl::MapItemToAccID 方法将根树视图项与辅助功能标识符相关联。

CRect rect;
HTREEITEM hUS = m_treeCtrl.MapAccIdToItem(accIdUS);
m_treeCtrl.GetItemPartRect(hUS, TVGIPR_BUTTON, &rect);
m_treeCtrl.GetDC()->Draw3dRect(&rect, RGB(255, 0, 0), RGB(0, 0, 255));

CTreeCtrl::GetItemRect

调用此函数以检索 hItem 的边框,并确定它是否可见。

BOOL GetItemRect(
    HTREEITEM hItem,
    LPRECT lpRect,
    BOOL bTextOnly) const;

参数

hItem
树视图控件项的句柄。

lpRect
指向接收边框的 RECT 结构的指针。 坐标相对于树视图控件的左上角。

bTextOnly
如果此参数为非零值,则边框仅包括项的文本。 如果此参数为零,则边框包括项在树视图控件中占用的整行。

返回值

如果项可见,则为非零值,lpRect 中包含边框。 否则,则为 0,且未初始化 lpRect

示例

HTREEITEM hmyItem = m_TreeCtrl.GetSelectedItem();

// Dump the bounds of hmyItem.
if (hmyItem != NULL)
{
   RECT r;

   m_TreeCtrl.GetItemRect(hmyItem, &r, FALSE);

   TRACE(TEXT("left = %d, top = %d, right = %d, bottom = %d\r\n"),
         r.left,
         r.top,
         r.right,
         r.bottom);
}

CTreeCtrl::GetItemState

返回 hItem 指定的项的状态。

UINT GetItemState(
    HTREEITEM hItem,
    UINT nStateMask) const;

参数

hItem
要检索其状态的项的句柄。

nStateMask
指示要检索的一个或多个状态的掩码。 若要详细了解 nStateMask 的可能值,请参阅 Windows SDK 中关于 TVITEM 结构的 statestateMask 成员的讨论。

返回值

包含 nStateMask 指定的值的 C++ 按位 OR 运算符 (|) 的 UINT。 有关可能的值的信息,请参阅 CTreeCtrl::GetItem。 若要查找特定状态的值,请为状态值和返回值执行 C++ 按位 AND 运算符 (&),如以下示例所示

示例

// Show all of the visible items in bold.
HTREEITEM hItem = m_TreeCtrl.GetFirstVisibleItem();

while (hItem != NULL)
{
   m_TreeCtrl.SetItemState(hItem, TVIS_BOLD, TVIS_BOLD);
   ASSERT(TVIS_BOLD & m_TreeCtrl.GetItemState(hItem, TVIS_BOLD));
   hItem = m_TreeCtrl.GetNextVisibleItem(hItem);
}

CTreeCtrl::GetItemStateEx

检索当前树视图控件中指定项的扩展状态。

UINT GetItemStateEx(HTREEITEM hItem) const;

参数

hItem
[in] 树视图控件项的句柄。

返回值

项的扩展状态。 有关详细信息,请参阅 TVITEMEX 结构的 uStateEx 成员。

备注

此方法将发送 TVM_GETITEM 消息,如 Windows SDK 中所述。 该消息返回描述树视图控件项的 TVITEMEX 结构,然后此方法从该结构中检索 uStateEx 成员。

CTreeCtrl::GetItemText

返回 hItem 指定的项的文本。

CString GetItemText(HTREEITEM hItem) const;

参数

hItem
将检索其文本的项的句柄。

返回值

包含项文本的 CString 对象。

示例

请参阅 CTreeCtrl::GetNextItem 的示例。

CTreeCtrl::GetLastVisibleItem

检索当前树视图控件中最后的未扩展项。

HTREEITEM GetLastVisibleItem() const;

返回值

如果方法成功,则返回最后的未扩展节点项的句柄;否则返回 NULL

注解

此方法将发送 TVM_GETNEXTITEM 消息,如 Windows SDK 中所述。 有关详细信息,请参阅该消息的 flag 参数中的 TVGN_LASTVISIBLE 标志。

示例

第一个代码示例定义一个变量 m_treeCtrl,它用于访问当前树视图控件。 该代码示例还定义了一个无符号整数和多个 HTREEITEM 变量。 下一示例中使用了其中一个或多个变量。

public:
// Variable to access tree control.
CTreeCtrl m_treeCtrl;
// Variable to access splitbutton control.
CSplitButton m_splitbutton;
// Accessibility identifier
UINT accIdUS;
// HTREEITEMs
HTREEITEM hCountry;
HTREEITEM hPA;
HTREEITEM hWA;

下一个代码示例检索最后的未扩展树视图节点项的句柄,然后围绕该项目绘制三维矩形。 在代码示例的前面部分中(未展示),我们创建了一个树视图,其中包含美国根国家/地区节点、宾夕法尼亚州和华盛顿州子节点以及这些州的城市树项。

CRect rect;
HTREEITEM hLast = m_treeCtrl.GetLastVisibleItem();
m_treeCtrl.GetItemPartRect(hLast, TVGIPR_BUTTON, &rect);
m_treeCtrl.GetDC()->Draw3dRect(&rect, RGB(255, 0, 0), RGB(0, 0, 255));

CTreeCtrl::GetLineColor

此成员函数实现 Win32 消息 TVM_GETLINECOLOR 的行为,如 Windows SDK 中所述。

COLORREF GetLineColor() const;

返回值

当前线条颜色。

示例

COLORREF cr = m_TreeCtrl.GetLineColor();

CTreeCtrl::GetNextItem

调用此函数以检索与 hItem 存在指定关系(由 nCode 参数指示)的树视图项。

HTREEITEM GetNextItem(
    HTREEITEM hItem,
    UINT nCode) const;

参数

hItem
树项的句柄。

nCode
指示与 hItem 的关系类型的标志。 此标志的值可为以下之一:

  • TVGN_CARET 检索当前选定的项。

  • TVGN_CHILD 检索由 hItem 参数指定的项的第一个子项。

  • TVGN_DROPHILITE 检索作为拖放操作目标的项。

  • TVGN_FIRSTVISIBLE 检索第一个可见项。

  • TVGN_LASTVISIBLE 检索树中最后的扩展项。 这不会检索树视图窗口中最后的可见项。

  • TVGN_NEXT 检索下一个同级项。

  • TVGN_NEXTVISIBLE 检索指定项之后的下一个可见项。

  • TVGN_PARENT 检索指定项的父级。

  • TVGN_PREVIOUS 检索前一个同级项。

  • TVGN_PREVIOUSVISIBLE 检索指定项之前的第一个可见项。

  • TVGN_ROOT 检索指定项所属的根项的第一个子项。

返回值

如果成功,则返回下一项的句柄;否则返回 NULL

备注

如果检索的项是树的根节点,则此函数将返回 NULL。 例如,如果将此消息与树视图根节点的第一级子节点上的 TVGN_PARENT 标志一起使用,则消息将返回 NULL

示例

有关如何在循环中使用 GetNextItem 的示例,请参阅 CTreeCtrl::DeleteItem

// find the currently selected item
HTREEITEM hCurSel = m_TreeCtrl.GetNextItem(TVI_ROOT, TVGN_CARET);

// report it to the user
if (hCurSel == NULL)
{
   AfxMessageBox(_T("There is no selected item"));
}
else
{
   CString str;
   str.Format(_T("The currently selected item is \"%s\""),
              (LPCTSTR)m_TreeCtrl.GetItemText(hCurSel));
   AfxMessageBox((LPCTSTR)str);
}

CTreeCtrl::GetNextSiblingItem

调用此函数以检索 hItem 的下一个同级。

HTREEITEM GetNextSiblingItem(HTREEITEM hItem) const;

参数

hItem
树项的句柄。

返回值

下一个同级项的句柄;否则为 NULL

示例

HTREEITEM hmyItem = m_TreeCtrl.GetSelectedItem();

// Show all of the children of hmyItem in bold.
if (m_TreeCtrl.ItemHasChildren(hmyItem))
{
   HTREEITEM hItem = m_TreeCtrl.GetChildItem(hmyItem);

   while (hItem != NULL)
   {
      m_TreeCtrl.SetItemState(hItem, TVIS_BOLD, TVIS_BOLD);
      hItem = m_TreeCtrl.GetNextSiblingItem(hItem);
   }
}

CTreeCtrl::GetNextVisibleItem

调用此函数以检索 hItem 的下一个可见项。

HTREEITEM GetNextVisibleItem(HTREEITEM hItem) const;

参数

hItem
树项的句柄。

返回值

下一个可见项的句柄;否则为 NULL

示例

请参阅 CTreeCtrl::SetCheck 的示例。

CTreeCtrl::GetParentItem

调用此函数可检索 hItem 的父级。

HTREEITEM GetParentItem(HTREEITEM hItem) const;

参数

hItem
树项的句柄。

返回值

父项的句柄;否则为 NULL

注解

如果指定项的父项是树的根节点,则此函数将返回 NULL

示例

请参阅 CTreeCtrl::EnsureVisible 的示例。

CTreeCtrl::GetPrevSiblingItem

调用此函数以检索 hItem 的前一个同级。

HTREEITEM GetPrevSiblingItem(HTREEITEM hItem) const;

参数

hItem
树项的句柄。

返回值

前一个同级的句柄;否则为 NULL

示例

HTREEITEM hmyItem = m_TreeCtrl.GetSelectedItem();

// Show all of the previous siblings of hmyItem in bold.
HTREEITEM hItem = hmyItem;

while (hItem != NULL)
{
   m_TreeCtrl.SetItemState(hItem, TVIS_BOLD, TVIS_BOLD);
   hItem = m_TreeCtrl.GetPrevSiblingItem(hItem);
}

CTreeCtrl::GetPrevVisibleItem

调用此函数以检索 hItem 的前一个可见项。

HTREEITEM GetPrevVisibleItem(HTREEITEM hItem) const;

参数

hItem
树项的句柄。

返回值

前一个可见项的句柄;否则为 NULL

示例

HTREEITEM hmyItem = m_TreeCtrl.GetSelectedItem();

// Show all of the previous visible items of hmyItem in bold.
HTREEITEM hItem = hmyItem;

while (hItem != NULL)
{
   m_TreeCtrl.SetItemState(hItem, TVIS_BOLD, TVIS_BOLD);
   hItem = m_TreeCtrl.GetPrevVisibleItem(hItem);
}

CTreeCtrl::GetRootItem

调用此函数以检索树视图控件的根项。

HTREEITEM GetRootItem() const;

返回值

根项的句柄;否则为 NULL

示例

请参阅 CTreeCtrl::EditLabel 的示例。

CTreeCtrl::GetScrollTime

调用此成员函数以检索树视图控件的最大滚动时间。

UINT GetScrollTime() const;

返回值

最大滚动时间(以毫秒为单位)。

备注

此成员函数实现 Win32 消息 TVM_GETSCROLLTIME 的行为,如 Windows SDK 中所述。

CTreeCtrl::GetSelectedCount

检索当前树视图控件中已选定的项的数目。

UINT GetSelectedCount();

返回值

选择的项的数量。

备注

此方法将发送 TVM_GETSELECTEDCOUNT 消息,如 Windows SDK 中所述。

CTreeCtrl::GetSelectedItem

调用此函数以检索树视图控件的当前选定项。

HTREEITEM GetSelectedItem() const;

返回值

已选项的句柄;否则为 NULL

示例

// Expand the selected item and make it visible, if possible.
HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();

if ((hItem != NULL) && m_TreeCtrl.ItemHasChildren(hItem))
{
   m_TreeCtrl.Expand(hItem, TVE_EXPAND);
   m_TreeCtrl.EnsureVisible(hItem);
}

CTreeCtrl::GetTextColor

此成员函数实现 Win32 消息 TVM_GETTEXTCOLOR 的行为,如 Windows SDK 中所述。

COLORREF GetTextColor() const;

返回值

表示当前文本颜色的 COLORREF 值。 如果此值为 -1,则表示控件使用系统文本颜色。

示例

请参阅 CTreeCtrl::SetTextColor 的示例。

CTreeCtrl::GetToolTips

此成员函数实现 Win32 消息 TVM_GETTOOLTIPS 的行为,如 Windows SDK 中所述。

CToolTipCtrl* GetToolTips() const;

返回值

指向树控件要使用的 CToolTipCtrl 对象的指针。 如果 Create 成员函数使用样式 TVS_NOTOOLTIPS,则不使用任何工具提示,并返回 NULL

备注

GetToolTips 的 MFC 实现返回树控件使用的 CToolTipCtrl 对象,而不是指向工具提示控件的句柄。

示例

// If the tree control does not have a tooltips control,
// then use m_ToolTips as the tooltips for the tree control.
if (m_TreeCtrl.GetToolTips() == NULL)
{
   m_TreeCtrl.SetToolTips(&m_ToolTips);
}

CTreeCtrl::GetVisibleCount

调用此函数以检索树视图控件中的可见项计数。

UINT GetVisibleCount() const;

返回值

树视图控件中可见项的数量;否则为 -1。

示例

请参阅 CTreeCtrl::SetCheck 的示例。

CTreeCtrl::HitTest

调用此函数以确定指定点相对于树视图控件的工作区的位置。

HTREEITEM HitTest(
    CPoint pt,
    UINT* pFlags = NULL) const;

HTREEITEM HitTest(TVHITTESTINFO* pHitTestInfo) const;

参数

pt
要测试的点的客户端坐标。

pFlags
指向接收命中测试结果信息的整数的指针。 它可以是“注解”部分的成员下 flags 列出的一个或多个值。

pHitTestInfo
TVHITTESTINFO 结构的地址,其中包含命中测试的位置,并接收命中测试结果的相关信息。

返回值

返回占用指定点的树视图项的句柄,如果没有项占用该点,则返回 NULL

备注

调用此函数时,pt 参数指定要测试的点的坐标。 该函数返回指定点处的项的句柄,如果没有项占用该点,则返回 NULL。 此外,该 pFlags 参数还包含指示指定点位置的值。 可能的值有:

说明
TVHT_ABOVE 在工作区上方。
TVHT_BELOW 在工作区上方。
TVHT_NOWHERE 在工作区中,位于最后一个项目下方。
TVHT_ONITEM 在与项关联的位图或标签上。
TVHT_ONITEMBUTTON 在与项关联的按钮上。
TVHT_ONITEMICON 在与项关联的位图上。
TVHT_ONITEMINDENT 在与项关联的缩进中。
TVHT_ONITEMLABEL 在与项关联的标签(字符串)上。
TVHT_ONITEMRIGHT 在项右侧的区域。
TVHT_ONITEMSTATEICON 在处于用户定义状态的树视图项的状态图标上。
TVHT_TOLEFT 工作区左侧。
TVHT_TORIGHT 工作区右侧。

示例

// Select the item that is at the point myPoint.
UINT uFlags;
HTREEITEM hItem = m_TreeCtrl.HitTest(myPoint, &uFlags);

if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
{
   m_TreeCtrl.SelectItem(hItem);
}

CTreeCtrl::InsertItem

调用此函数以在树视图控件中插入新项。

HTREEITEM InsertItem(LPTVINSERTSTRUCT lpInsertStruct);

HTREEITEM InsertItem(
    UINT nMask,
    LPCTSTR lpszItem,
    int nImage,
    int nSelectedImage,
    UINT nState,
    UINT nStateMask,
    LPARAM lParam,
    HTREEITEM hParent,
    HTREEITEM hInsertAfter);

HTREEITEM InsertItem(
    LPCTSTR lpszItem,
    HTREEITEM hParent = TVI_ROOT,
    HTREEITEM hInsertAfter = TVI_LAST);

HTREEITEM InsertItem(
    LPCTSTR lpszItem,
    int nImage,
    int nSelectedImage,
    HTREEITEM hParent = TVI_ROOT,
    HTREEITEM hInsertAfter = TVI_LAST);

参数

lpInsertStruct
指向指定要插入的树视图项的属性的 TVINSERTSTRUCT 的指针。

nMask
指定要设置的属性的整数。 请参阅 Windows SDK 中的 TVITEM 结构。

lpszItem
包含项目文本的字符串的地址。

nImage
树视图控件图像列表中的项图像的索引。

nSelectedImage
树视图控件图像列表中项的所选图像的索引。

nState
指定项状态的值。 有关相应状态的列表,请参阅 Windows SDK 中的“树视图控件项状态”。

nStateMask
指定要设置的状态。 请参阅 Windows SDK 中的 TVITEM 结构。

lParam
与项关联的指针大小应用程序特定值。

hParent
插入项的父级的句柄。

hInsertAfter
要在其后插入新项的项的句柄。

返回值

如果成功,则返回新项的具备;否则返回 NULL

注解

该示例展示插入树控件项时可能需要使用函数的每个版本的情况。

示例

// Insert a root item using the structure. We must
// initialize a TVINSERTSTRUCT structure and pass its
// address to the call. 

TVINSERTSTRUCT tvInsert;
tvInsert.hParent = NULL;
tvInsert.hInsertAfter = NULL;
tvInsert.item.mask = TVIF_TEXT;
tvInsert.item.pszText = _T("United States");

HTREEITEM hCountry = m_TreeCtrl.InsertItem(&tvInsert);

// Insert subitems of that root. Pennsylvania is
// a state in the United States, so its item will be a child
// of the United States item. We won't set any image or states,
// so we supply only the TVIF_TEXT mask flag. This
// override provides nearly complete control over the
// insertion operation without the tedium of initializing
// a structure. If you're going to add lots of items
// to a tree, you might prefer the structure override
// as it affords you a performance win by allowing you
// to initialize some fields of the structure only once,
// outside of your insertion loop.

HTREEITEM hPA = m_TreeCtrl.InsertItem(TVIF_TEXT,
   _T("Pennsylvania"), 0, 0, 0, 0, 0, hCountry, NULL);

// Insert the "Washington" item and assure that it is
// inserted after the "Pennsylvania" item. This override is 
// more appropriate for conveniently inserting items with 
// images.

HTREEITEM hWA = m_TreeCtrl.InsertItem(_T("Washington"),
   0, 0, hCountry, hPA);

// We'll add some cities under each of the states.
// The override used here is most appropriate
// for inserting text-only items.

m_TreeCtrl.InsertItem(_T("Pittsburgh"), hPA, TVI_SORT);
m_TreeCtrl.InsertItem(_T("Harrisburg"), hPA, TVI_SORT);
m_TreeCtrl.InsertItem(_T("Altoona"), hPA, TVI_SORT);

m_TreeCtrl.InsertItem(_T("Seattle"), hWA, TVI_SORT);
m_TreeCtrl.InsertItem(_T("Kalaloch"), hWA, TVI_SORT);
m_TreeCtrl.InsertItem(_T("Yakima"), hWA, TVI_SORT);

CTreeCtrl::ItemHasChildren

使用此函数可确定由 hItem 指定的树项是否具有子项。

BOOL ItemHasChildren(HTREEITEM hItem) const;

参数

hItem
树项的句柄。

返回值

如果 hItem 指定的树项具有子项,则为非零值;如果该树项没有子项,则返回 0。

备注

在这种情况下可以使用 CTreeCtrl::GetChildItem 检索这些子项。

示例

请参阅 CTreeCtrl::GetSelectedItem 的示例。

CTreeCtrl::MapAccIdToItem

将指定的辅助功能标识符映射到当前树视图控件中的树视图项的句柄。

HTREEITEM MapAccIdToItem(UINT uAccId) const;

参数

uAccId
[in] 树视图项中某一元素的辅助功能标识符。

返回值

uAccId 参数对应的树视图项 (HTREEITEM) 的句柄。 有关详细信息,请参阅 TVITEMEX 结构的 hItem 成员。

注解

辅助工具是用于帮助残障人士使用计算机的应用程序。 IAccessible 接口使用辅助功能标识符,以唯一地指定窗口中的元素。 有关 IAccessible 的详细信息,请参阅 Microsoft Active Accessibility

此方法将发送 TVM_MAPACCIDTOHTREEITEM 消息,如 Windows SDK 中所述。

示例

第一个代码示例定义一个变量 m_treeCtrl,它用于访问当前树视图控件。 该代码示例还定义了一个无符号整数和多个 HTREEITEM 变量。 这些变量用于下一示例。

public:
// Variable to access tree control.
CTreeCtrl m_treeCtrl;
// Variable to access splitbutton control.
CSplitButton m_splitbutton;
// Accessibility identifier
UINT accIdUS;
// HTREEITEMs
HTREEITEM hCountry;
HTREEITEM hPA;
HTREEITEM hWA;

下一个代码示例使用辅助功能标识符和 CTreeCtrl::MapAccIdToItem 方法检索根树视图项的句柄。 该示例使用句柄和 CTreeCtrl::GetItemPartRect 方法在该项周围绘制三维矩形。 在代码示例的前面部分中(未展示),我们创建了一个树视图,其中包含美国根国家/地区节点、宾夕法尼亚州和华盛顿州子节点以及这些州的城市树项。 我们使用 CTreeCtrl::MapItemToAccID 方法将根树视图项与辅助功能标识符相关联。

CRect rect;
HTREEITEM hUS = m_treeCtrl.MapAccIdToItem(accIdUS);
m_treeCtrl.GetItemPartRect(hUS, TVGIPR_BUTTON, &rect);
m_treeCtrl.GetDC()->Draw3dRect(&rect, RGB(255, 0, 0), RGB(0, 0, 255));

CTreeCtrl::MapItemToAccID

将当前树视图控件中的树视图项的指定句柄映射到辅助功能标识符。

UINT MapItemToAccID(HTREEITEM hItem) const;

参数

hItem
[in] 控件中树视图项的句柄。 有关详细信息,请参阅 TVITEMEX 结构的 hItem 成员。

返回值

对应于 hItem 参数的辅助功能标识符。

备注

辅助工具是用于帮助残障人士使用计算机的应用程序。 IAccessible 接口使用辅助功能标识符,以唯一地指定窗口中的元素。 有关 IAccessible 的详细信息,请参阅 Microsoft Active Accessibility

此方法将发送 TVM_MAPHTREEITEMTOACCID 消息,如 Windows SDK 中所述。

示例

第一个代码示例定义一个变量 m_treeCtrl,它用于访问当前树视图控件。 该代码示例还定义了一个无符号整数和多个 HTREEITEM 变量。 这些变量用于下一示例。

public:
// Variable to access tree control.
CTreeCtrl m_treeCtrl;
// Variable to access splitbutton control.
CSplitButton m_splitbutton;
// Accessibility identifier
UINT accIdUS;
// HTREEITEMs
HTREEITEM hCountry;
HTREEITEM hPA;
HTREEITEM hWA;

下一个代码示例获取树视图控件项的标识号。 在代码示例的前面部分中(未展示),我们创建了一个树视图,其中包含美国根国家/地区节点、宾夕法尼亚州和华盛顿州子节点以及这些州的城市树项。 此代码示例获取根国家/地区节点的唯一标识号。

// Map an accessibility identifier to the Pennsylvania node.
accIdUS = m_treeCtrl.MapItemToAccId(hCountry);

CTreeCtrl::Select

调用此函数以选择给定的树视图项、将项滚动到视图中或按用于指示拖放操作目标的样式重新绘制项。

BOOL Select(
    HTREEITEM hItem,
    UINT nCode);

参数

hItem
树项的句柄。

nCode
要执行的操作的类型。 此参数可能是以下值之一:

  • TVGN_CARET 将所选内容设置为给定项。

  • TVGN_DROPHILITE 按用于指示拖放操作目标的样式重新绘制给定项。

  • TVGN_FIRSTVISIBLE 垂直滚动树视图,让给定项成为第一个可见项。

返回值

如果成功,则不为 0;否则为 0。

备注

如果 nCode 包含该值 TVGN_CARET,父窗口将接收 TVN_SELCHANGINGTVN_SELCHANGED 通知消息。 此外,如果指定项是已折叠父项的子项,则展开父项的子项列表以显示指定的项。 在这种情况下,父窗口会接收 TVN_ITEMEXPANDINGTVN_ITEMEXPANDED 通知消息。

示例

请参阅 CTreeCtrl::HitTest 的示例。

CTreeCtrl::SelectDropTarget

调用此函数以按用于指示拖放操作目标的样式重新绘制项。

BOOL SelectDropTarget(HTREEITEM hItem);

参数

hItem
树项的句柄。

返回值

如果成功,则不为 0;否则为 0。

示例

// Set the item at the point myPoint as the drop target.
UINT uFlags;
HTREEITEM hItem = m_TreeCtrl.HitTest(myPoint, &uFlags);

if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
{
   m_TreeCtrl.SelectDropTarget(hItem);
   ASSERT(m_TreeCtrl.GetDropHilightItem() == hItem);
}

CTreeCtrl::SelectItem

调用此函数以选择给定的树视图项。

BOOL SelectItem(HTREEITEM hItem);

参数

hItem
树项的句柄。

返回值

如果成功,则不为 0;否则为 0。

备注

如果 hItemNULL,则该函数不选择任何项。

示例

// Select the item that is at the point myPoint.
UINT uFlags;
HTREEITEM hItem = m_TreeCtrl.HitTest(myPoint, &uFlags);

if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
{
   m_TreeCtrl.SelectItem(hItem);
}

CTreeCtrl::SelectSetFirstVisible

调用此函数以垂直滚动树视图,让给定项成为第一个可见项。

BOOL SelectSetFirstVisible(HTREEITEM hItem);

参数

hItem
要设置为第一个可见项的树项的句柄。

返回值

如果成功,则不为 0;否则为 0。

注解

该函数使用 TVM_SELECTITEMTVGN_FIRSTVISIBLE 消息参数将消息发送到窗口。

示例

// Select the item at the point myPoint as the first visible item.
UINT uFlags;
HTREEITEM hItem = m_TreeCtrl.HitTest(myPoint, &uFlags);

if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
{
   m_TreeCtrl.SelectSetFirstVisible(hItem);
}

CTreeCtrl::SetAutoscrollInfo

设置当前树视图控件的自动注册速率。

BOOL SetAutoscrollInfo(
    UINT uPixelsPerSec,
    UINT uUpdateTime);

参数

uPixelsPerSec
[in] 每秒滚动的像素数。

uUpdateTime
[in] 控件更新之间的时间间隔。

返回值

始终返回 TRUE

备注

自动滚动参数用于将当前不可见的项滚动进视图。 树视图控件必须具有 TVS_EX_AUTOHSCROLL 扩展样式,如树视图控件扩展样式中所述。

此方法将发送 TVM_SETAUTOSCROLLINFO 消息,如 Windows SDK 中所述。

示例

第一个代码示例定义一个变量 m_treeCtrl,它用于访问当前树视图控件。 该代码示例还定义了一个无符号整数和多个 HTREEITEM 变量。 这些变量用于下一示例。

public:
// Variable to access tree control.
CTreeCtrl m_treeCtrl;
// Variable to access splitbutton control.
CSplitButton m_splitbutton;
// Accessibility identifier
UINT accIdUS;
// HTREEITEMs
HTREEITEM hCountry;
HTREEITEM hPA;
HTREEITEM hWA;

下一个代码示例设置当前树视图控件的自动滚动行为。 在代码示例的前面部分中(未展示),我们创建了一个树视图,其中包含美国根国家/地区节点、宾夕法尼亚州和华盛顿州子节点以及这些州的城市树项。 我们有意地设置较窄的树视图控件,这样该控件必须自动滚动以显示作为焦点的树项。 该代码示例将树视图控件设置为每隔 5 秒自动滚动 30 像素,直到树项进入视图。

// Scroll 30 pixels/sec and redraw every 5 seconds.
m_treeCtrl.SetAutoscrollInfo(30, 5);

CTreeCtrl::SetBkColor

此成员函数实现 Win32 消息 TVM_SETBKCOLOR 的行为,如 Windows SDK 中所述。

COLORREF SetBkColor(COLORREF clr);

参数

clr
包含新背景色的 COLORREF 值。 如果此值为 -1,则表示控件将还原为使用系统背景色。

返回值

表示当前文本颜色的 COLORREF 值。 如果此值为 -1,则表示控件使用系统文本颜色。

示例

请参阅 CTreeCtrl::SetTextColor 的示例。

CTreeCtrl::SetCheck

调用此成员函数可设置树控件项的选中状态。

BOOL SetCheck(
    HTREEITEM hItem,
    BOOL fCheck = TRUE);

参数

hItem
用于接收选中状态更改的 HTREEITEM

fCheck
指示是否要选中或取消选中树控件项。 默认情况下,SetCheck 设置要选中的项。

返回值

如果成功,则不为 0;否则为 0。

注解

当树控件项被选中时(即 fCheck 设为 TRUE),该项在显示时会带有复选标记。

示例

UINT uCount = m_TreeCtrl.GetVisibleCount();
HTREEITEM hItem = m_TreeCtrl.GetFirstVisibleItem();

// Toggle the check state of all the visible items.
for (UINT i = 0; i < uCount; i++)
{
   ASSERT(hItem != NULL);
   m_TreeCtrl.SetCheck(hItem, !m_TreeCtrl.GetCheck(hItem));
   hItem = m_TreeCtrl.GetNextVisibleItem(hItem);
}

若要使用复选框,请先设置 TVS_CHECKBOXES,然后再填充树控件。

m_TreeCtrl.ModifyStyle(0, TVS_CHECKBOXES);

HTREEITEM aItem = m_TreeCtrl.InsertItem(_T("AAA"));
m_TreeCtrl.SetCheck(aItem);

CTreeCtrl::SetExtendedStyle

设置当前树视图控件的扩展样式。

DWORD SetExtendedStyle(
    DWORD dwExMask,
    DWORD dwExStyles);

参数

dwExMask
[in] 一个位掩码,指定当前树视图控件中的哪些样式受此方法影响。 如果此参数为零,则忽略此参数,并将参数的值 dwExStyles 分配给树视图控件。 指定零值,或树视图控件扩展样式中所述的样式的按位组合 (OR)。

dwExStyles
[in] 一个位掩码,指定要设置或清除当前树视图控件中的哪些样式。 若要设置样式的组合,请指定树视图控件扩展样式中所述的样式的按位组合 (OR)。 若要清除一组样式,请指定零。

返回值

包含之前的扩展控件样式的值。

备注

此方法清除 dwExMask 参数中指定的样式,然后设置 dwExStyles 参数中指定的样式。 仅包括对应于 dwExMask 更改中的位的扩展样式。

此方法将发送 TVM_SETEXTENDEDSTYLE 消息,如 Windows SDK 中所述。

示例

第一个代码示例定义一个变量 m_treeCtrl,它用于访问当前树视图控件。 该代码示例还定义了一个无符号整数和多个 HTREEITEM 变量。 这些变量用于下一示例。

public:
// Variable to access tree control.
CTreeCtrl m_treeCtrl;
// Variable to access splitbutton control.
CSplitButton m_splitbutton;
// Accessibility identifier
UINT accIdUS;
// HTREEITEMs
HTREEITEM hCountry;
HTREEITEM hPA;
HTREEITEM hWA;

下一个代码示例将 TVS_EX_AUTOHSCROLL 扩展样式添加到当前树视图控件。 在代码示例的前面部分中(未展示),我们创建了一个树视图,其中包含美国根国家/地区节点、宾夕法尼亚州和华盛顿州子节点以及这些州的城市树项。 我们有意地设置较窄的树视图控件,这样该控件必须自动滚动以显示作为焦点的树项。

m_treeCtrl.SetExtendedStyle(TVS_EX_AUTOHSCROLL, TVS_EX_AUTOHSCROLL);

CTreeCtrl::SetImageList

调用此函数,可设置树视图控件的普通或状态图像列表,并使用新图像重新绘制控件。

CImageList* SetImageList(
    CImageList* pImageList,
    int nImageListType);

参数

pImageList
指向要分配的图像列表的指针。 如果 pImageListNULL,则从树视图控件中删除所有图像。

nImageListType
要检索的图像列表的类型。 图像列表可以是以下值之一:

  • TVSIL_NORMAL 设置普通图像列表,该列表包含树视图项的选定图像和非选定图像。 必须将此状态用于覆盖图像。

  • TVSIL_STATE 设置状态图像列表,其中包含处于用户定义的状态的树视图项的图像。

返回值

指向上一个图像列表的指针(如果有);否则为 NULL

示例

请参阅 CTreeCtrl::GetImageList 的示例。

CTreeCtrl::SetIndent

调用此函数,可设置树视图控件的缩进宽度,并重新绘制控件以反映新宽度。

void SetIndent(UINT nIndent);

参数

nIndent
缩进的宽度(以像素为单位)。 如果 nIndent 小于系统定义的最小宽度,则新宽度会被设置为系统定义的最小值。

示例

请参阅 CTreeCtrl::GetIndent 的示例。

CTreeCtrl::SetInsertMark

此成员函数实现 Win32 消息 TVM_SETINSERTMARK 的行为,如 Windows SDK 中所述。

BOOL SetInsertMark(
    HTREEITEM hItem,
    BOOL fAfter = TRUE);

参数

hItem
HTREEITEM 指定将放置插入标记的项。 如果此自变量为 NULL,则插入标记会被删除。

fAfter
BOOL 值,该值指定插入标记是放置在指定项之前还是之后。 如果此自变量非零,则插入标记将放在项之后。 如果此自变量为零,则插入标记将放在项之前。

返回值

如果成功,则不为 0;否则为 0。

示例

// Set the insert mark to be before the item at the point myPoint.
UINT uFlags;
HTREEITEM hItem = m_TreeCtrl.HitTest(myPoint, &uFlags);

if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
{
   m_TreeCtrl.SetInsertMark(hItem, FALSE);
}

CTreeCtrl::SetInsertMarkColor

此成员函数实现 Win32 消息 TVM_SETINSERTMARKCOLOR 的行为,如 Windows SDK 中所述。

COLORREF SetInsertMarkColor(COLORREF clrNew);

参数

clrNew
一个 COLORREF 值,该值包含新插入标记颜色。

返回值

一个 COLORREF 值,该值包含上一个插入标记颜色。

示例

请参阅 CTreeCtrl::GetInsertMarkColor 的示例。

CTreeCtrl::SetItem

调用此函数以设置指定树视图项的属性。

BOOL SetItem(TVITEM* pItem);

BOOL SetItem(
    HTREEITEM hItem,
    UINT nMask,
    LPCTSTR lpszItem,
    int nImage,
    int nSelectedImage,
    UINT nState,
    UINT nStateMask,
    LPARAM lParam);

参数

pItem
指向包含新项属性的 TVITEM 结构的指针,如 Windows SDK 中所述。

hItem
要设置其属性的项的句柄。 请参阅 Windows SDK 中 TVITEM 结构的 hItem 成员。

nMask
指定要设置的属性的整数。 请参阅 TVITEM 结构的 mask 成员。

lpszItem
包含项目文本的字符串的地址。

nImage
树视图控件图像列表中的项图像的索引。 请参阅 TVITEM 结构的 iImage 成员。

nSelectedImage
树视图控件图像列表中项的所选图像的索引。 请参阅 TVITEM 结构的 iSelectedImage 成员。

nState
指定项状态的值。 请参阅 TVITEM 结构的 State 成员。

nStateMask
指定要设置的状态。 请参阅 TVITEM 结构的 stateMask 成员。

lParam
与项关联的指针大小应用程序特定值。

返回值

如果成功,则不为 0;否则为 0。

备注

TVITEM 结构中,hItem 成员标识项,mask 成员指定要设置的属性。

如果 mask 成员或 nMask 参数指定 TVIF_TEXT 值,则 pszText 成员或 lpszItem 是以 null 结尾的字符串的地址,并且 cchTextMax 成员将被忽略。 如果 mask(或 nMask)指定 TVIF_STATE 值,则 stateMask 成员或 nStateMask 参数指定要更改的项状态,且 state 成员或 nState 参数包含这些状态的值。

示例

// Show the item at the point myPoint in bold.
UINT uFlags;
HTREEITEM hItem = m_TreeCtrl.HitTest(myPoint, &uFlags);

if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
{
   m_TreeCtrl.SetItem(hItem, TVIF_STATE, NULL, 0, 0, TVIS_BOLD,
                      TVIS_BOLD, 0);
}

CTreeCtrl::SetItemData

调用此函数以设置与指定项关联的特定于应用程序的值。

BOOL SetItemData(
    HTREEITEM hItem,
    DWORD_PTR dwData);

参数

hItem
将检索其数据的项的句柄。

dwData
与由 hItem 指定的项关联的指针大小应用程序特定值。

返回值

如果成功,则不为 0;否则为 0。

示例

CString str;
HTREEITEM hItem;

// Insert 20 items into the tree control making every item's
// data be the handle of the item.
for (int i = 0; i < 20; i++)
{
   str.Format(TEXT("item %d"), i);
   hItem = m_TreeCtrl.InsertItem(str);

   if (hItem != NULL)
   {
      m_TreeCtrl.SetItemData(hItem, (DWORD_PTR)hItem);
   }
}

CTreeCtrl::SetItemExpandedImageIndex

设置在当前树视图控件的指定项处于展开状态时要显示的图像的索引。

BOOL SetItemExpandedImageIndex(
    HTREEITEM hItem,
    int iExpandedImage);

参数

hItem
[in] 树视图控件项的句柄。

iExpandedImage
[in] 当指定项处于展开状态时要显示的图像的索引。

返回值

如果此方法成功,则为 TRUE;否则为 FALSE

备注

此方法将发送 TVM_SETITEM 消息,如 Windows SDK 中所述。 此方法将 iExpandedImage 参数分配给 TVITEMEX 结构的 iExpandedImage 成员,然后在消息中使用该结构。

示例

第一个代码示例定义一个变量 m_treeCtrl,它用于访问当前树视图控件。 该代码示例还定义了一个无符号整数和多个 HTREEITEM 变量。 这些变量用于下一示例。

public:
// Variable to access tree control.
CTreeCtrl m_treeCtrl;
// Variable to access splitbutton control.
CSplitButton m_splitbutton;
// Accessibility identifier
UINT accIdUS;
// HTREEITEMs
HTREEITEM hCountry;
HTREEITEM hPA;
HTREEITEM hWA;

下一个代码示例是一个简单的测试,用于确定 CTreeCtrl::GetItemExpandedImageIndex 方法是否返回 CTreeCtrl::SetItemExpandedImageIndex 方法设置的值。 在代码示例的前面部分中(未展示),我们创建了一个树视图,其中包含美国根国家/地区节点、宾夕法尼亚州和华盛顿州子节点以及这些州的城市树项。

CString str;
CString msg = _T("The set and retrieved item expanded image ")
              _T("indexes are%s equal.");
int nSetItem = 0;
m_treeCtrl.SetItemExpandedImageIndex(hCountry, nSetItem);
int nItem = m_treeCtrl.GetItemExpandedImageIndex(hCountry);
if (nItem == nSetItem)
   str.Format(msg, _T(""));
else
   str.Format(msg, _T(" not"));
AfxMessageBox(str, MB_ICONINFORMATION);

CTreeCtrl::SetItemHeight

此成员函数实现 Win32 消息 TVM_SETITEMHEIGHT 的行为,如 Windows SDK 中所述。

SHORT SetItemHeight(SHORT cyHeight);

参数

cyHeight
指定树视图中每个项的新高度(以像素为单位)。 如果此自变量小于图像的高度,则会被设置为图像的高度。 如果此自变量不是偶数,则会向下舍入为最接近的偶数值。 如果此自变量为 -1,控件将恢复为使用其默认项高度。

返回值

项的上一高度(以像素为单位)。

示例

请参阅 CTreeCtrl::GetItemHeight 的示例。

CTreeCtrl::SetItemImage

将图像与项相关联。

BOOL SetItemImage(
    HTREEITEM hItem,
    int nImage,
    int nSelectedImage);

参数

hItem
要设置其图像的项的句柄。

nImage
树视图控件图像列表中的项图像的索引。

nSelectedImage
树视图控件图像列表中项的所选图像的索引。

返回值

如果成功,则不为 0;否则为 0。

备注

树视图控件中的每个项都可有一对与之关联的位图图像。 图像显示在项标签的左侧。 选中项时会显示一个图像,未选定项时显示另一个图像。 例如,选中项时,该项可能显示一个打开的文件夹;未选定项时,该项可能显示一个关闭的文件夹。

调用此函数可在树视图控件的图像列表中设置项图像及其所选图像的索引。

有关图像的详细信息,请参阅 CImageList

示例

请参阅 CTreeCtrl::GetItemImage 的示例。

CTreeCtrl::SetItemState

设置 hItem 指定的项的状态。

BOOL SetItemState(
    HTREEITEM hItem,
    UINT nState,
    UINT nStateMask);

参数

hItem
要设置其状态的项的句柄。

nState
指定项的新状态。

nStateMask
指定要被更改的状态。

返回值

如果成功,则不为 0;否则为 0。

备注

有关状态的信息,请参阅 CTreeCtrl::GetItem

示例

请参阅 CTreeCtrl::GetItemState 的示例。

CTreeCtrl::SetItemStateEx

设置当前树视图控件中指定项的扩展状态。

BOOL SetItemStateEx(
    HTREEITEM hItem,
    UINT uStateEx);

参数

hItem
[in] 树视图控件项的句柄。

uStateEx
[in] 项的扩展状态。 有关详细信息,请参阅 TVITEMEX 结构的 uStateEx 成员。

返回值

如果此方法成功,则为 TRUE;否则为 FALSE

备注

此方法将发送 TVM_SETITEM 消息,如 Windows SDK 中所述。 此方法将 uStateEx 参数分配给 TVITEMEX 结构的 uStateEx 成员,然后在消息中使用该结构。

示例

第一个代码示例定义一个变量 m_treeCtrl,它用于访问当前树视图控件。 该代码示例还定义了一个无符号整数和多个 HTREEITEM 变量。 这些变量用于下一示例。

public:
// Variable to access tree control.
CTreeCtrl m_treeCtrl;
// Variable to access splitbutton control.
CSplitButton m_splitbutton;
// Accessibility identifier
UINT accIdUS;
// HTREEITEMs
HTREEITEM hCountry;
HTREEITEM hPA;
HTREEITEM hWA;

下一个代码示例将树视图项设置为禁用状态。 在代码示例的前面部分中(未展示),我们创建了一个树视图,其中包含美国根国家/地区节点、宾夕法尼亚州和华盛顿州子节点以及这些州的城市树项。 此代码示例将宾夕法尼亚州节点设置为禁用状态。

// Disable the Pennsylvania node.
m_treeCtrl.SetItemStateEx(hPA, TVIS_EX_DISABLED);

CTreeCtrl::SetItemText

设置 hItem 指定的项的文本。

BOOL SetItemText(
    HTREEITEM hItem,
    LPCTSTR lpszItem);

参数

hItem
将设置其文本的项的句柄。

lpszItem
包含项的新文本的字符串的地址

返回值

如果成功,则不为 0;否则为 0。

示例

// Clear the text of the item at point myPoint.
UINT uFlags;
HTREEITEM hItem = m_TreeCtrl.HitTest(myPoint, &uFlags);

if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
{
   m_TreeCtrl.SetItemText(hItem, NULL);
}

CTreeCtrl::SetLineColor

调用此成员函数以设置树视图控件的当前线条颜色。

COLORREF SetLineColor(COLORREF clrNew = CLR_DEFAULT);

参数

clrNew
新线条颜色。

返回值

上一线条颜色。

备注

此成员函数实现 Win32 消息 TVM_SETLINECOLOR 的行为,如 Windows SDK 中所述。

示例

COLORREF clrPrev = m_TreeCtrl.SetLineColor(RGB(255, 0, 0));

CTreeCtrl::SetScrollTime

调用此成员函数以设置树视图控件的最大滚动时间。

UINT SetScrollTime(UINT uScrollTime);

参数

uScrollTime
新的最大滚动时间(以毫秒为单位)。 如果此值小于 100,将向上舍入为 100。

返回值

上一最大滚动时间(以毫秒为单位)。

备注

此成员函数实现 Win32 消息 TVM_SETSCROLLTIME 的行为,如 Windows SDK 中所述。

CTreeCtrl::SetTextColor

此成员函数实现 Win32 消息 TVM_SETTEXTCOLOR 的行为,如 Windows SDK 中所述。

COLORREF SetTextColor(COLORREF clr);

参数

clr
包含新文本颜色的 COLORREF 值。 如果此自变量为 -1,则表示控件将还原为使用系统文本色。

返回值

表示上一文本颜色的 COLORREF 值。 如果此值为 -1,则表示控件之前使用的是系统文本颜色。

示例

// change text color to white and background to dark blue
m_TreeCtrl.SetTextColor(RGB(255, 255, 255));
ASSERT(m_TreeCtrl.GetTextColor() == RGB(255, 255, 255));
m_TreeCtrl.SetBkColor(RGB(0, 0, 128));
ASSERT(m_TreeCtrl.GetBkColor() == RGB(0, 0, 128));

// force repaint immediately
m_TreeCtrl.Invalidate();

CTreeCtrl::SetToolTips

此成员函数实现 Win32 消息 TVM_SETTOOLTIPS 的行为,如 Windows SDK 中所述。

CToolTipCtrl* SetToolTips(CToolTipCtrl* pWndTip);

参数

pWndTip
指向树控件将使用的 CToolTipCtrl 对象的指针。

返回值

指向包含控件之前使用的工具提示的 CToolTipCtrl 对象的指针,如果之前未使用任何工具提示,则返回 NULL

注解

若要使用工具提示,请在创建 CTreeCtrl 对象时指示 TVS_NOTOOLTIPS 样式。

示例

请参阅 CTreeCtrl::GetToolTips 的示例。

CTreeCtrl::ShowInfoTip

显示当前树视图控件中指定项的信息提示。

void ShowInfoTip(HTREEITEM hItem);

参数

hItem
[in] 控件中树视图项的句柄。 有关详细信息,请参阅 TVITEMEX 结构的 hItem 成员。

备注

若要详细了解工具提示和信息提示之间的差异,请参阅工具提示和信息提示

此方法将发送 TVM_SHOWINFOTIP 消息,如 Windows SDK 中所述。

CTreeCtrl::SortChildren

调用此函数,能以字母顺序对树视图控件中给定父项的子项进行排序。

BOOL SortChildren(HTREEITEM hItem);

参数

hItem
要对其子项进行排序的父项的句柄。 如果 hItemNULL,排序将从树的根开始。

返回值

如果成功,则不为 0;否则为 0。

注解

SortChildren不会递归遍历树;仅对 hItem 的直接子级进行排序。

示例

// Sort all of the items in the tree control.
m_TreeCtrl.SortChildren(TVI_ROOT);

CTreeCtrl::SortChildrenCB

调用此函数,使用应用程序定义的回调函数(该回调函数会对树视图项进行比较)对这些项进行排序。

BOOL SortChildrenCB(LPTVSORTCB pSort);

参数

pSort
指向 TVSORTCB 结构的指针。

返回值

如果成功,则不为 0;否则为 0。

备注

如果第一项必须在第二项之前,则该结构的比较函数 lpfnCompare 必须返回负值;如果第一项应该在第二项之后,则该函数必须返回正值;如果第一项和第二项相等,则返回零。

对于要被比较的两项,lParam1lParam2 对应于 TVITEM 结构的 lParam 成员。 lParamSort 参数对应于 TV_SORTCB 结构的 lParam 成员。

示例

// Sort the item in reverse alphabetical order.
int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
   // lParamSort contains a pointer to the tree control.
   // The lParam of an item is just its handle, 
   // as specified with SetItemData
   CTreeCtrl* pmyTreeCtrl = (CTreeCtrl*)lParamSort;
   CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam1);
   CString strItem2 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam2);

   return strItem2.Compare(strItem1);
}

 

TVSORTCB tvs;

// Sort the tree control's items using my
// callback procedure.
tvs.hParent = TVI_ROOT;
tvs.lpfnCompare = MyCompareProc;
tvs.lParam = (LPARAM)&m_TreeCtrl;

m_TreeCtrl.SortChildrenCB(&tvs);

另请参阅

MFC 示例 CMNCTRL1
CWnd
层次结构图
CImageList