目錄
添加線條鏈接
添加折疊小按鈕
設置樹控件的節點和對應的圖標
設置默認選中項?
設置選中項切換響應函數?
涉及接口介紹:
首先我們通過資源視圖可以添加一個樹形控件,如下:?
添加線條鏈接
在樹形控件中,有一個屬性“Has Lines”,如下圖所示(這里因為漢化的原因顯示中文):?
當?“Has Lines”為true時,子節點與父節點之間會添加線條鏈接,效果如下:
上面雖然子節點與父節點之間雖然有線條鏈接,但是可以發現與根節點之間并沒有線條鏈接,這里可以在設置 “Lines At Root”屬性如下:
添加折疊小按鈕
默認情況下,每個父項節點是沒有“+”按鈕,進行展開/收起子節點的,這里有一個屬性“Has Buttons”,如下:
當?“Has Buttons”屬性為true時,效果如下:
設置樹控件的節點和對應的圖標
第一步:準備icon資源,如果原始圖片資源不是icon資源,我們可以先通過如下鏈接,將圖片資源轉換為icon格式
Convertio — 文件轉換器https://convertio.co/zh/將準備好的icon資源放到項目所在目錄下的res目錄中
隨后,在資源視圖中添加資源->icon->導入
第二步:通過代碼添加樹控件節點和對應的圖標
這里需要注意的是CImageList imgeList必須在頭文件聲明,因為這里是在初始化函數中執行的,當函數結束,對話窗窗口還存在,樹控件還指向imgeList中的圖標,就會導致訪問已經釋放的資源問題。
/*1、加載圖片資源*/HICON img[3];img[0] = AfxGetApp()->LoadIcon(IDR_MAINFRAME);img[1] = AfxGetApp()->LoadIcon(IDR_MAINFRAME);img[2] = AfxGetApp()->LoadIcon(IDR_MAINFRAME);imgeList.Create(30, 30, ILC_COLOR32, 3, 3);for (int i = 0; i < 3; ++i) {imgeList.Add(img[i]);}m_tree.SetImageList(&imgeList, TVSIL_NORMAL);/*2、設置節點、節點圖標、節點的父節點*/HTREEITEM root = m_tree.InsertItem(L"根節點", 0, 0, TVI_ROOT);HTREEITEM parent = m_tree.InsertItem(L"父節點", 1, 1, root);HTREEITEM sub1 = m_tree.InsertItem(L"子節點", 2, 2, parent);
?效果如下:
設置默認選中項?
HTREEITEM root = m_tree.InsertItem(L"根節點", 0, 0, TVI_ROOT);HTREEITEM parent = m_tree.InsertItem(L"父節點", 1, 1, root);HTREEITEM sub1 = m_tree.InsertItem(L"子節點", 2, 2, parent);/*設置默認選中項*/m_tree.SelectItem(sub1);
效果如下:
設置選中項切換響應函數?
?在樹控件中,選中項切換對應的響應函數是TVN_SELCHANGED,如下:
我們可以在這個函數中編寫需要的代碼
涉及接口介紹:
1、AfxGetApp()->LoadIcon()
功能:加載應用程序圖標資源(已經通過資源文件導入的資源)
語法:
HICON LoadIcon(UINT nIDResource);
參數 :
- nIDResource :圖標資源ID(如 IDR_MAINFRAME )
返回值 :成功返回圖標句柄(HICON),失敗返回NULL。
說明 :
- AfxGetApp() 獲取當前應用程序對象指針
- 從應用程序資源中加載指定ID的圖標
2、CImageList::Create()
功能:創建圖像列表對象
語法:
BOOL Create(int cx, // 圖像寬度int cy, // 圖像高度UINT nFlags, // 圖像類型標志int nInitial, // 初始圖像數量int nGrow // 增長數量
);
參數詳解 :
-cx :每個圖像的寬度(像素)
-cy :每個圖像的高度(像素)
-nFlags :圖像類型標志,常用值:
? - ILC_COLOR :使用默認行為
? - ILC_COLOR4 :4位(16色)
? - ILC_COLOR8 :8位(256色)
? - ILC_COLOR16 :16位(65536色)
? - ILC_COLOR24 :24位(真彩色)
? - ILC_COLOR32 :32位(真彩色+Alpha通道) //常用
? - ILC_MASK :使用掩碼
- nInitial :圖像列表的初始容量
- nGrow :當需要更多空間時的增長數量
返回值 :成功返回TRUE,失敗返回FALSE。
3、CTreeCtrl::SetImageList()
功能:為樹控件設置圖像列表
語法:
CImageList* SetImageList(CImageList* pImageList, // 圖像列表指針int nImageListType // 圖像列表類型
);
參數 :
- pImageList :指向CImageList對象的指針
- nImageListType :圖像列表類型,常用值:
? - TVSIL_NORMAL :正常狀態圖像列表? //常用
? - TVSIL_STATE :狀態圖像列表
返回值 :返回之前設置的圖像列表指針。
4、CTreeCtrl::InsertItem()
功能:在樹控件中插入新節點
語法:
HTREEITEM InsertItem(LPCTSTR lpszItem, // 節點文本int nImage, // 正常狀態圖像索引int nSelectedImage, // 選中狀態圖像索引HTREEITEM hParent, // 父節點句柄HTREEITEM hInsertAfter // 插入位置
);// 簡化版本
HTREEITEM InsertItem(LPCTSTR lpszItem, // 節點文本HTREEITEM hParent, // 父節點句柄HTREEITEM hInsertAfter // 插入位置
);
參數詳解 :
- lpszItem :節點顯示的文本字符串
- nImage :節點正常狀態時顯示的圖像索引(對應圖像列表中的索引)
- nSelectedImage :節點被選中時顯示的圖像索引
- hParent :父節點句柄,特殊值:
? - TVI_ROOT :作為根節點插入
? - 其他HTREEITEM:作為指定節點的子節點
- hInsertAfter :插入位置,特殊值:
? - TVI_FIRST :插入為第一個子節點
? - TVI_LAST :插入為最后一個子節點
? - TVI_SORT :按字母順序插入