CTreeCtrl
類別
提供 Windows 通用樹狀檢閱控制項的功能。
語法
class CTreeCtrl : public CWnd
成員
公用建構函式
名稱 | 描述 |
---|---|
CTreeCtrl::CTreeCtrl |
建構 CTreeCtrl 物件。 |
公用方法
備註
「樹檢視控件」是一個視窗,會顯示階層式專案清單,例如檔中的標題、索引中的專案,或磁碟上的檔案和目錄。 每個項目都包含標籤和選擇性點陣圖影像,因此,每個項目都可以擁有與自己相關的子項目清單。 使用者可以按一下項目以展開和摺疊子項目的關聯清單。
此控件(因此類別 CTreeCtrl
)僅適用於在 Windows 98 和 Windows NT 第 4 版和更新版本下執行的程式。
如需使用 CTreeCtrl
的詳細資訊,請參閱:
繼承階層架構
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
指定樹檢視控件的識別碼。
傳回值
如果初始化成功,則為非零;否則為 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 樣式的清單,請參閱 dwExStyle
Windows SDK 中的 參數 CreateWindowEx
。
dwStyle
指定樹檢視控件的樣式。 套用窗口樣式,如 CreateWindow
Windows SDK 中所述,以及樹視圖控件樣式的任何組合。
rect
結構的參考 RECT
,描述要建立之視窗的大小和位置,在的用戶端座標中 pParentWnd
。
pParentWnd
控件父系之視窗的指標。
nID
控制件的子視窗識別碼。
傳回值
如果成功則為非零,否則為 0。
備註
使用 CreateEx
而不是 Create
套用延伸的 Windows 樣式,由 Windows 擴充樣式前置詞 WS_EX_
所指定。
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。
範例
// The underlying Windows API always returns TRUE
VERIFY(m_TreeCtrl.DeleteAllItems());
CTreeCtrl::DeleteItem
呼叫此函式以從樹視圖控件中刪除專案。
BOOL DeleteItem(HTREEITEM hItem);
參數
hItem
要刪除之樹狀專案的句柄。 如果 hitem
具有 TVI_ROOT
值,則會從樹視圖控件刪除所有專案。
傳回值
如果成功則為非零;否則為 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。
範例
請參閱 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。
範例
請參閱 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。
備註
影像會出現在專案標籤的左側。 選取專案時會顯示一個影像,另一個影像則會在未選取項目時顯示。 例如,專案可能會在選取時顯示開啟的資料夾,而未選取時會顯示關閉的資料夾。
呼叫此函式,以擷取專案影像的索引,以及在樹視圖控件的影像清單中擷取其選取的影像。
範例
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
指標。 如果這個方法成功,結構會接收 和 nPart
所hItem
指定元件的矩形座標。
傳回值
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
方法來繪製該專案周圍的 3D 矩形。 在未顯示的程式代碼範例的上一節中,我們建立了一個樹視圖,其中包含 美國 的根國家/地區節點、賓夕法尼亞州和華盛頓州的子節點,以及這些州城市樹狀專案。 我們使用 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
。 否則,使用未初始化的 lpRect
0。
範例
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 中 結構的 和 stateMask
成員TVITEM
的討論state
。
傳回值
UINT
,保留所nStateMask
指定值的C++位OR運算元 (|
) 。 如需可能值的資訊,請參閱 CTreeCtrl::GetItem
。 若要尋找特定狀態的值,請執行C++位 AND 運算符 (&
) f 狀態值和傳回值,如下列範例所示。
範例
// 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]樹視圖控件專案的句柄。
傳回值
項目的擴充狀態。 如需詳細資訊,請參閱 uStateEx
結構的成員 TVITEMEX
。
備註
這個方法會傳送 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 中所述。 如需詳細資訊,請參閱 TVGN_LASTVISIBLE
該訊息參數中的 flag
旗標。
範例
第一個程式代碼範例會定義用來存取目前樹檢視控件的變數 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;
下一個程式代碼範例會擷取最後一個未展開之樹視圖節點專案的句柄,然後繪製該專案周圍的 3D 矩形。 在未顯示的程式代碼範例的先前區段中,我們建立了一個樹視圖,其中包含 美國 的根國家/地區節點、賓夕法尼亞州和華盛頓州的子節點,以及這些州城市樹狀專案。
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
呼叫此函式,將具有指定關聯性的樹檢視專案擷 nCode
取至 hItem
。
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
參數會包含值,指出指定點的位置。 可能的值包括:
值 | Description |
---|---|
TVHT_ABOVE |
在工作區上方。 |
TVHT_BELOW |
工作區下方。 |
TVHT_NOWHERE |
在工作區中,但位於最後一個專案下方。 |
TVHT_ONITEM |
在與專案相關聯的點陣圖或標籤上。 |
TVHT_ONITEMBUTTON |
在與專案相關聯的按鈕上。 |
TVHT_ONITEMICON |
在與專案相關聯的點陣圖上。 |
TVHT_ONITEMINDENT |
在與專案相關聯的縮排中。 |
TVHT_ONITEMLABEL |
在與專案相關聯的標籤 (string) 上。 |
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
整數,指定要設定的屬性。 TVITEM
請參閱 Windows SDK 中的結構。
lpszItem
包含項目文字的字串位址。
nImage
樹視圖控件影像清單中的專案影像索引。
nSelectedImage
樹視圖控件影像清單中的項目選取影像的索引。
nState
指定項目狀態的值。 如需適當的狀態清單,請參閱 Windows SDK 中的樹視圖控件項目狀態。
nStateMask
指定要設定的狀態。 TVITEM
請參閱 Windows SDK 中的結構。
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
如需詳細資訊,請參閱 hItem
結構的成員 TVITEMEX
。
備註
輔助功能輔助功能是協助殘障人士使用計算機的應用程式。 介面會使用 IAccessible
輔助功能識別碼來唯一指定視窗中的專案。 如需 API 的詳細資訊 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
方法,在該專案周圍繪製 3D 矩形。 在程式代碼範例的先前區段中,我們建立了一個樹視圖,其中包含 美國 的根國家/地區節點、賓夕法尼亞州和華盛頓州的子節點,以及這些州城市樹狀專案。 我們使用 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]控件中樹視圖專案的句柄。 如需詳細資訊,請參閱 hItem
結構的成員 TVITEMEX
。
傳回值
對應至 hItem 參數的輔助功能識別碼。
備註
輔助功能輔助功能是協助殘障人士使用計算機的應用程式。 介面會使用 IAccessible
輔助功能識別碼來唯一指定視窗中的專案。 如需 API 的詳細資訊 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。
備註
如果 nCode
包含 值 TVGN_CARET
,則父視窗會收到 TVN_SELCHANGING
和 TVN_SELCHANGED
通知訊息。 此外,如果指定的專案是折迭父專案的子專案,則會展開父項的子專案清單以顯示指定的專案。 在此情況下,父視窗會收到 TVN_ITEMEXPANDING
和 TVN_ITEMEXPANDED
通知訊息。
範例
請參閱 CTreeCtrl::HitTest
的範例。
CTreeCtrl::SelectDropTarget
呼叫此函式,以重新繪製樣式中的專案,以指出拖放作業的目標。
BOOL SelectDropTarget(HTREEITEM hItem);
參數
hItem
樹狀專案的句柄。
傳回值
如果成功則為非零;否則為 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。
備註
如果 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。
備註
函式會使用 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
。
備註
autoscroll 參數可用來捲動至目前看不到的專案。 樹視圖控件必須具有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。
備註
核取樹狀目錄控制項專案時(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。
範例
// 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
要設定其屬性的專案句柄。 hItem
請參閱 Windows SDK 中 結構的成員TVITEM
。
nMask
整數,指定要設定的屬性。 mask
請參閱 結構的成員TVITEM
。
lpszItem
包含項目文字的字串位址。
nImage
樹視圖控件影像清單中的專案影像索引。 iImage
請參閱 結構的成員TVITEM
。
nSelectedImage
樹視圖控件影像清單中的項目選取影像的索引。 iSelectedImage
請參閱 結構的成員TVITEM
。
nState
指定項目狀態的值。 State
請參閱 結構的成員TVITEM
。
nStateMask
指定要設定的狀態。 stateMask
請參閱 結構的成員TVITEM
。
lParam
與專案相關聯的指標大小應用程式特定值。
傳回值
如果成功則為非零;否則為 0。
備註
在結構中TVITEM
hItem
,成員會識別專案,而mask
成員會指定要設定的屬性。
mask
如果成員或參數指定TVIF_TEXT
值,則pszText
成員或 nMask
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。
範例
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
參數指派給 iExpandedImage
結構的成員 TVITEMEX
,然後在訊息中使用該結構。
範例
第一個程式代碼範例會定義用來存取目前樹檢視控件的變數 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。
備註
樹視圖控件中的每個專案都可以有一對與其相關聯的位圖影像。 影像會出現在專案標籤的左側。 選取專案時會顯示一個影像,另一個影像則會在未選取項目時顯示。 例如,專案可能會在選取時顯示開啟的資料夾,而未選取時會顯示關閉的資料夾。
呼叫此函式,以在樹視圖控件的影像清單中設定專案的影像及其選取影像的索引。
如需影像的詳細資訊,請參閱 CImageList
。
範例
請參閱 CTreeCtrl::GetItemImage
的範例。
CTreeCtrl::SetItemState
設定所 hItem
指定項目的狀態。
BOOL SetItemState(
HTREEITEM hItem,
UINT nState,
UINT nStateMask);
參數
hItem
要設定其狀態的專案句柄。
nState
指定專案的新狀態。
nStateMask
指定要變更的狀態。
傳回值
如果成功則為非零;否則為 0。
備註
如需狀態的資訊,請參閱 CTreeCtrl::GetItem
。
範例
請參閱 CTreeCtrl::GetItemState
的範例。
CTreeCtrl::SetItemStateEx
設定目前樹視圖控件中指定專案的擴充狀態。
BOOL SetItemStateEx(
HTREEITEM hItem,
UINT uStateEx);
參數
hItem
[in]樹視圖控件專案的句柄。
uStateEx
[in]項目的擴充狀態。 如需詳細資訊,請參閱 uStateEx
結構的成員 TVITEMEX
。
傳回值
TRUE
如果此方法成功,則為 ;否則為 FALSE
。
備註
這個方法會傳送 TVM_SETITEM
訊息,如 Windows SDK 中所述。 這個方法會將 uStateEx
參數指派給 uStateEx
結構的成員 TVITEMEX
,然後在訊息中使用該結構。
範例
第一個程式代碼範例會定義用來存取目前樹檢視控件的變數 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。
範例
// 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
先前未使用任何工具提示。
備註
若要使用工具提示,請在 TVS_NOTOOLTIPS
建立 CTreeCtrl
物件時指出樣式。
範例
請參閱 CTreeCtrl::GetToolTips
的範例。
CTreeCtrl::ShowInfoTip
顯示目前樹檢視控件中指定專案的資訊提示。
void ShowInfoTip(HTREEITEM hItem);
參數
hItem
[in]控件中樹視圖專案的句柄。 如需詳細資訊,請參閱 hItem
結構的成員 TVITEMEX
。
備註
如需工具提示與資訊提示之間差異的詳細資訊,請參閱 工具提示和資訊提示。
這個方法會傳送 TVM_SHOWINFOTIP
訊息,如 Windows SDK 中所述。
CTreeCtrl::SortChildren
呼叫此函式,以依字母順序排序樹視圖控件中指定父專案的子專案。
BOOL SortChildren(HTREEITEM hItem);
參數
hItem
要排序其子專案之父專案的句柄。 如果 hItem
為 NULL
,則排序會從樹狀結構的根目錄繼續。
傳回值
如果成功則為非零;否則為 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。
備註
如果第一個專案應位於第二個專案之前,則結構比較函 lpfnCompare
式必須傳回負值、如果第一個項目應該遵循第二個專案,則傳回正值,如果兩個專案相等,則傳回零。
lParam1
和 lParam2
參數會對應至lParam
所比較之兩個專案之 TVITEM
結構的成員。 參數 lParamSort
會對應至 lParam
結構的成員 TV_SORTCB
。
範例
// 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);