CTreeCtrl
类
提供 Windows 公共树视图控件的功能。
语法
class CTreeCtrl : public CWnd
成员
公共构造函数
名称 | 描述 |
---|---|
CTreeCtrl::CTreeCtrl |
构造 CTreeCtrl 对象。 |
公共方法
备注
“树视图控件”是显示项(如文档中的标题、索引中的条目和磁盘上的文件和目录)的分层列表的窗口。 每个项包含一个标签和一个可选位图图像,且每个项可以有一个与之关联的子项列表。 通过单击项,用户可以展开和折叠关联的子项列表。
此控件(因此决定 CTreeCtrl
类)仅适用于在 Windows 98 和 Windows NT 版本 4 及更高版本下运行的程序。
有关使用 CTreeCtrl
的详细信息,请参阅:
Windows SDK 中的树视图控件参考。
继承层次结构
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 中 CreateWindowEx
的 dwExStyle
参数。
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
结构的指针。 如果此方法成功,则结构接收部件的矩形坐标(由 hItem
和 nPart
指定)。
返回值
如果此方法成功,则为 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
结构的 state
和 stateMask
成员的讨论。
返回值
包含 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_SELCHANGING
和 TVN_SELCHANGED
通知消息。 此外,如果指定项是已折叠父项的子项,则展开父项的子项列表以显示指定的项。 在这种情况下,父窗口会接收 TVN_ITEMEXPANDING
和 TVN_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。
备注
如果 hItem
为 NULL
,则该函数不选择任何项。
示例
// 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_SELECTITEM
和 TVGN_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
指向要分配的图像列表的指针。 如果 pImageList
为 NULL
,则从树视图控件中删除所有图像。
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
要对其子项进行排序的父项的句柄。 如果 hItem
为 NULL
,排序将从树的根开始。
返回值
如果成功,则不为 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
必须返回负值;如果第一项应该在第二项之后,则该函数必须返回正值;如果第一项和第二项相等,则返回零。
对于要被比较的两项,lParam1
和 lParam2
对应于 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);