MFC 樹控制元件CTreeCtrl
阿新 • • 發佈:2018-11-07
常用屬性設定:
屬性 |
含義 |
has buttons |
True 有展開按鈕 |
has lines |
True 有展開線 |
lines at root |
True 有根節點 |
常用介面:
介面 |
功能 |
AfxGetApp() |
獲取應用程式物件指標 |
CWinApp::LoadIcon |
載入自定義圖示 |
CImageList::Create |
建立影象列表 |
CImageList::Add |
影象列表追加圖示 |
CTreeCtrl::SetImageList |
設定圖形狀態列表 |
CTreeCtrl::InsertItem |
插入節點 |
CTreeCtrl::SelectItem |
設定預設選中項 |
CTreeCtrl::GetSelectedItem |
獲取選中項 |
CTreeCtrl::GetItemText |
獲取某項內容 |
演示步驟
- 設定屬性 設定線、按鈕
- 設定圖片集合
- setImageList(CImageList* list , 正常顯示的巨集)
- list準備 create(30,30, 32位色,4,4)
- add (HICON)
- setImageList(CImageList* list , 正常顯示的巨集)
- 新增節點
- InsertItem( 節點名稱,顯示圖片,選中後顯示的圖,父節點)
- 設定預設節點
- selectItem
- 節點間切換 觸發事件OnTvnSelchangedTree1
- 獲取當前項 item = getSelectItem
- CString str = getItemText(item)
1.關聯控制元件變數
2.新增圖示資源(icon)
- 把ico資原始檔放在專案res資料夾中
2.資源檢視 -> Icon -> 新增資源:
3.匯入ico檔案
3.通過程式碼載入圖示
//載入圖示
HICON icon[3];
icon[0] = AfxGetApp()->LoadIconW(IDI_ICON1);
icon[1] = AfxGetApp()->LoadIconW(IDI_ICON2);
icon[2] = AfxGetApp()->LoadIconW(IDI_ICON3);
4.建立影象列表
1. .h 檔案類中定義圖形列表(CImageList)物件
CImageList m_imageList; //影象列表
2. OnInitDialog()函式中完成影象列表的建立、圖示的追加
//影象列表,程式完畢不能釋放, 建立
//30, 30: 圖片的寬度和高度
//ILC_COLOR32:樣式
// 3, 3: 有多少圖片寫多少
m_imageList.Create(30, 30, ILC_COLOR32, 3, 3);
//給影象列表新增圖片
for (int i = 0; i < 3; i++)
{
//圖片列表載入圖示
m_imageList.Add(icon[i]);
}
5.樹控制元件的相應操作
//樹控制元件設定圖片列表
m_treeCtrl.SetImageList(&m_imageList, TVSIL_NORMAL);
//給樹建立節點
//根節點,父節點,子節點
HTREEITEM root = m_treeCtrl.InsertItem(TEXT("中國"), 0, 0, NULL);
HTREEITEM fathter = m_treeCtrl.InsertItem(TEXT("北京"), 1, 1, root);
HTREEITEM son = m_treeCtrl.InsertItem(TEXT("海淀"), 2, 2, fathter);
//設定某個節點被選中
m_treeCtrl.SelectItem(fathter);
程式效果圖:
樹控制元件常用事件為:TVN_SELCHANGED,當選擇某個節點時,自動觸發此事件。
void CMy01_TreeCtrlDlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此新增控制元件通知處理程式程式碼
*pResult = 0;
HTREEITEM selItem;
//獲得選擇項
selItem = m_treeCtrl.GetSelectedItem();
//獲取選中的內容
CString cs = m_treeCtrl.GetItemText(selItem);
MessageBox(cs);
}