樹形控件划分:
根節點:所有都收縮后的節點
節點: 能展開
葉: 不能展開
說明: 節點和葉不是絕對的划分,當在對葉添加新下屬后,該葉變為節點
樹形控件操作邏輯:
1、創建控件 CTreeCtrl類的Create成員函數的原型如下:
virtual BOOL Create( DWORD dwStyle, //控件風格 const RECT& rect, //控件窗口的位置和大小 CWnd* pParentWnd, //控件父窗口的指針 UINT nID //控件的ID );
控件的主要風格以及含義。 TVS_DISABLEDRAGDROP:禁止樹形控件發送TVN_BEGINDRAG通知消息,即不支持拖動操作;TVS_EDITLABELS:用戶可以編輯節點的標簽文本;TVS_HASBUTTONS:顯示帶有"+"或"-"的小方框來表示某項能否被展開或已展開;TVS_HASLINES:在父節點與子節點間連線以更清晰地顯示樹的結構;TVS_LINESATROOT:在根節點處連線;TVS_SHOWSELALWAYS:即使控件失去輸入焦點,仍顯示出項的選擇狀態;同樣,動態創建樹形控件時,除了能夠指定上述風格的組合外,一般還要指定WS_CHILD和WS_VISIBLE風格。
2.添加圖標類
3.添加節點
4.消息響應函數
樹形控件添加:
節點結構體: HTREEITEM ,用該結構體聲明節點變量
為控件添加項:
HTREEITEM InsertItem( LPCTSTR lpszItem, //項名 int nImage, //樹視圖控件圖像列表中的項的圖像的索引 int nSelectedImage, //樹視圖控件圖像列表中的項的所選圖像的索引 HTREEITEM hParent = TVI_ROOT, //插入的項的父級的句柄 HTREEITEM hInsertAfter = TVI_LAST //新的項之前要插入的項的句柄 );
注:添加項之前先設定根節點,在初始化
樹形控件鼠標點擊:
判斷鼠標位置
HTREEITEM CMyTreeDlg::GetSelectTree() { CPoint pt; GetCursorPos(&pt);//得到當前鼠標的位置 m_MyTree.ScreenToClient(&pt);//將屏幕坐標轉換為客戶區坐標 HTREEITEM tree_Item = m_MyTree.HitTest(pt);//調用HitTest找到對應點擊的樹節點 return tree_Item; //返回鼠標位置節點 }
獲取某項文本
CString GetItemText(HTREEITEM hItem) const;
獲取指定關系項
HTREEITEM GetNextItem( HTREEITEM hItem, UINT nCode) const;
nCode
標志可以是下列值之一︰TVGN_CARET
檢索當前所選的項。TVGN_CHILD
檢索由指定的項的第一個子項目hItem
參數。TVGN_DROPHILITE
檢索拖放操作的目標的項。TVGN_FIRSTVISIBLE
檢索第一個可見項。TVGN_LASTVISIBLE
檢索在樹中最后一個展開的項目。 這並不檢索樹視圖窗口中可見的最后一項。TVGN_NEXT
檢索下一個同級項。TVGN_NEXTVISIBLE
檢索遵循指定的項的下一個可見項。TVGN_PARENT
檢索指定項的父級。TVGN_PREVIOUS
檢索前面的同級項。TVGN_PREVIOUSVISIBLE
檢索位於指定的項的第一個可見項。TVGN_ROOT
檢索指定的項的一部分的根項的第一個子級項。
獲取指定項的父項
HTREEITEM GetParentItem(HTREEITEM hItem) const;