1. 程式人生 > >MFC 樹控制元件CTreeCtrl

MFC 樹控制元件CTreeCtrl

常用屬性設定:

屬性

含義

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

獲取某項內容

演示步驟 

  1. 設定屬性  設定線、按鈕
  2. 設定圖片集合
    1. setImageList(CImageList* list , 正常顯示的巨集)
      1. list準備  create(30,30, 32位色,4,4)
      2. add (HICON)
  3. 新增節點
    1. InsertItem( 節點名稱,顯示圖片,選中後顯示的圖,父節點)
  4. 設定預設節點
    1. selectItem
  5. 節點間切換 觸發事件OnTvnSelchangedTree1
    1. 獲取當前項  item =  getSelectItem
    2. CString str =  getItemText(item)

1.關聯控制元件變數

2.新增圖示資源(icon)

  1. 把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);
}