1 create a MFC project
2 add this line code in dialog header file :
CImageList m_theImageList;
3 create a dialog box like next picture:
4 create maps for the two image:
m_tree, m_list.
5 add the following code to OnInitDialog fuction:
m_theImageList.Create(IDB_BITMAP1, 16, 1, RGB(0, 255, 0)); m_tree.SetImageList(&m_theImageList,LVSIL_NORMAL); CString userTreeHeader[2] = {"shape", "color"}; HTREEITEM userItem[2]; for(int i = 0; i < 2; ++i){ userItem[i] = m_tree.InsertItem(userTreeHeader[i], 6, 7, TVI_ROOT); m_tree.SetItemData(userItem[i], (DWORD)(i + 10)); } HTREEITEM thePoint; HTREEITEM userSpecifics = m_tree.InsertItem("rectangle", 6, 7, userItem[0]); m_tree.SetItemData(userSpecifics, (DWORD)0); thePoint = userSpecifics; userSpecifics = m_tree.InsertItem("circle", 6, 7, userItem[0]); m_tree.SetItemData(userSpecifics, (DWORD)1); userSpecifics = m_tree.InsertItem("red", 6, 7, userItem[1]); m_tree.SetItemData(userSpecifics, (DWORD)2); userSpecifics = m_tree.InsertItem("blue", 6, 7, userItem[1]); m_tree.SetItemData(userSpecifics, (DWORD)3); userSpecifics = m_tree.InsertItem("gray", 6, 7, userItem[1]); m_tree.SetItemData(userSpecifics, (DWORD)4); m_tree.Select(thePoint, TVGN_CARET); m_list.SetImageList(&m_theImageList, LVSIL_SMALL); CString Field[3] = {"figure", "shape", "color"}; for(i = 0; i < 3; ++i){ m_list.InsertColumn(i, Field[i], LVCFMT_LEFT, 75); }
6 add TVN_SELCHANGED to tree map, add the following code in its fuction
HTREEITEM SelItem; SelItem = m_tree.GetSelectedItem(); DWORD m; m = m_tree.GetItemData(SelItem); switch(m){ case 0: { m_list.DeleteAllItems(); m_list.InsertItem(0, "shape1", 0); m_list.SetItemText(0, 1, "rectangle"); m_list.SetItemText(0, 2, "gray"); m_list.InsertItem(1, "shape2", 1); m_list.SetItemText(1, 1, "rectangle"); m_list.SetItemText(1, 2, "red"); m_list.InsertItem(2, "shape3", 2); m_list.SetItemText(2, 1, "rectangle"); m_list.SetItemText(2, 2, "blue"); break; } case 1: { m_list.DeleteAllItems(); m_list.InsertItem(0, "shape1", 3); m_list.SetItemText(0, 1, "figure"); m_list.SetItemText(0, 2, "gray"); m_list.InsertItem(1, "shape2", 4); m_list.SetItemText(1, 1, "figure"); m_list.SetItemText(1, 2, "red"); m_list.InsertItem(2, "shape3", 5); m_list.SetItemText(2, 1, "figure"); m_list.SetItemText(2, 2, "blue"); break; } case 2: { m_list.DeleteAllItems(); m_list.InsertItem(0, "shape1", 1); m_list.SetItemText(0, 1, "rectangle"); m_list.SetItemText(0, 2, "red"); m_list.InsertItem(1, "shape2", 4); m_list.SetItemText(1, 1, "figure"); m_list.SetItemText(1, 2, "red"); } case 3: { m_list.DeleteAllItems(); m_list.InsertItem(0, "shape1", 2); m_list.SetItemText(0, 1, "rectangle"); m_list.SetItemText(0, 2, "blue"); m_list.InsertItem(1, "shape2", 5); m_list.SetItemText(1, 1, "figure"); m_list.SetItemText(1, 2, "blue"); } case 4: { m_list.DeleteAllItems(); m_list.InsertItem(0, "shape1", 0); m_list.SetItemText(0, 1, "rectangle"); m_list.SetItemText(0, 2, "gray"); m_list.InsertItem(1, "shape2", 3); m_list.SetItemText(1, 1, "figure"); m_list.SetItemText(1, 2, "gray"); } }
7 add LVN_ITEMCHANGED to list map, add the following code in its fuction
CString str; for(int i = 0; i < m_list.GetItemCount(); ++i){ if(m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED){ str.Format(_T("select %d line"), i + 1); AfxMessageBox(str); } }