list和tree

来源:互联网 发布:coc皮卡升级数据 编辑:程序博客网 时间:2024/06/10 23:50
 //初始化
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT); //使listview整行选择,而不仅仅是某列
m_imageList.Create(IDB_BITMAP1, 16, 1, RGB(0, 255, 0)); //根据位图资源,创建图像列表
m_tree.SetImageList(&m_imageList, TVSIL_NORMAL); //为TreeView控件设置位图
m_list.SetImageList(&m_imageList, LVSIL_SMALL); //为ListView控件设置位图
//插入根节点
HTREEITEM hRoot[3]; //树形控件的根项
CString sRoot[3] = {"一班", "二班", "三班"}; //根节点数据
for (int i = 0; i < 3; i++)
{
hRoot[i] = m_tree.InsertItem(sRoot[i], 0, 1, TVI_ROOT); //插入父项,默认图标和选中图标分别为0,1号图标
m_tree.SetItemData(hRoot[i], (DWORD)(i + 10)); //给父项设值为10, 11, 12
}
m_hActiveParent = hRoot[0];
//为一班插入3条数据,并选择张三为默认选项
HTREEITEM hCurrent;
hCurrent = m_hActiveChild = m_tree.InsertItem("张三", 3, 2, hRoot[0]); //父项1插入子项
m_tree.SetItemData(hCurrent, (DWORD)0); //子项赋值0
hCurrent = m_tree.InsertItem("李四", 3, 2, hRoot[0]); //父项1插入子项
m_tree.SetItemData(hCurrent, (DWORD)1); //子项赋值1
hCurrent = m_tree.InsertItem("王五", 3, 2, hRoot[0]); //父项1插入子项
m_tree.SetItemData(hCurrent, (DWORD)2); //子项赋值2
//为二班插入2条数据
hCurrent = m_tree.InsertItem("王明", 3, 2, hRoot[1]); //父项2插入子项
m_tree.SetItemData(hCurrent, (DWORD)3); //子项赋值3
hCurrent = m_tree.InsertItem("李亮", 3, 2, hRoot[1]); //父项2插入子项
m_tree.SetItemData(hCurrent, (DWORD)4); //子项赋值4
//为三班插入2条数据
hCurrent = m_tree.InsertItem("赵六", 3, 2, hRoot[2]); //父项3插入子项
m_tree.SetItemData(hCurrent, (DWORD)5); //子项赋值5
hCurrent = m_tree.InsertItem("孙刚", 3, 2, hRoot[2]); //父项3插入子项
m_tree.SetItemData(hCurrent, (DWORD)6); //子项赋值6
//设置 ListView 的表头标题
CString sTitle[3] = {"科目", "成绩", "类型"}; // ListView 的表头
for (int j = 0; j < 3; j++)
{
m_list.InsertColumn(j, sTitle[j], LVCFMT_LEFT, 70); //插入表头标题
}
//将一班 张三 设为默认选定项 
m_tree.Select(m_hActiveChild, TVGN_CARET);
//主动调用,使ListView第一次显示时有数据
long lResult = 0;
OnSelchangedTree1(NULL, &lResult);

//
GetDlgItem(IDC_LIST1)->SetFocus();
m_list.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
m_list.EnsureVisible(0, TRUE);

return FALSE; // return TRUE unless you set the focus to a control
//返回TRUE是使窗口本身得到焦点
}
void CTreeListDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_TREEVIEW * pNMTreeView = (NM_TREEVIEW *)pNMHDR;
// TODO: Add your control notification handler code here
HTREEITEM hItemParent;
HTREEITEM hSelItem = m_tree.GetSelectedItem(); //获取选中的学生
DWORD dwData = m_tree.GetItemData(hSelItem); //读取选中的学生的data
switch (dwData)
{
case 0:
{
m_tree.SetItemImage(m_hActiveChild, 3, 3); //先前活动子项更改图标
m_tree.SetItemImage(m_hActiveParent, 0, 0); //先前活动父项更改图标
m_tree.SetItemImage(hSelItem, 2, 2); //当前活动子项更改图标
hItemParent = m_tree.GetNextItem(hSelItem, TVGN_PARENT);//获取当前子项的父项
m_tree.SetItemImage(hItemParent, 1, 1); //当前活动父项更改图标
m_hActiveChild = hSelItem;
m_hActiveParent = hItemParent;
m_list.DeleteAllItems();//删除所有列表项

m_list.InsertItem(0, "数学", 0);//添加新行
m_list.SetItemText(0, 1, "80");
m_list.SetItemText(0, 2, "必修");

m_list.InsertItem(1, "物理", 0);//添加新行
m_list.SetItemText(1, 1, "82");
m_list.SetItemText(1, 2, "必修");

m_list.InsertItem(2, "德语", 0);//添加新行
m_list.SetItemText(2, 1, "83");
m_list.SetItemText(2, 2, "选修");
break;
}
case 1:
{
m_tree.SetItemImage(m_hActiveChild, 3, 3);//先前活动子项更改图标
m_tree.SetItemImage(m_hActiveParent, 0, 0);//先前活动父项更改图标
m_tree.SetItemImage(hSelItem, 2, 2);//当前活动子项更改图标
hItemParent = m_tree.GetNextItem(hSelItem, TVGN_PARENT);//获取当前子项的父项
m_tree.SetItemImage(hItemParent, 1, 1);//当前活动父项更改图标
m_hActiveChild = hSelItem;
m_hActiveParent = hItemParent;
m_list.DeleteAllItems();//删除所有列表项
m_list.InsertItem(0, "数学");//添加新行
m_list.SetItemText(0, 1, "70");
m_list.SetItemText(0, 2, "必修");
m_list.InsertItem(1, "物理");//添加新行
m_list.SetItemText(1, 1, "72");
m_list.SetItemText(1, 2, "必修");
m_list.InsertItem(2, "法语");//添加新行
m_list.SetItemText(2, 1, "72");
m_list.SetItemText(2, 2, "选修"); 
break;
}
case 2:
{
m_tree.SetItemImage(m_hActiveChild, 3, 3);//先前活动子项更改图标
m_tree.SetItemImage(m_hActiveParent, 0, 0);//先前活动父项更改图标
m_tree.SetItemImage(hSelItem, 2, 2);//当前活动子项更改图标
hItemParent = m_tree.GetNextItem(hSelItem, TVGN_PARENT);//获取当前子项的父项
m_tree.SetItemImage(hItemParent, 1, 1);//当前活动父项更改图标
m_hActiveChild = hSelItem;
m_hActiveParent = hItemParent;
m_list.DeleteAllItems();//删除所有列表项
m_list.InsertItem(0, "化学");//添加新行
m_list.SetItemText(0, 1, "70");
m_list.SetItemText(0, 2, "必修");
m_list.InsertItem(1, "物理");//添加新行
m_list.SetItemText(1, 1, "75");
m_list.SetItemText(1, 2, "必修");
m_list.InsertItem(2, "德语");//添加新行
m_list.SetItemText(2, 1, "92");
m_list.SetItemText(2, 2, "选修");
break;
}
case 3:
{
m_tree.SetItemImage(m_hActiveChild, 3, 3);//先前活动子项更改图标
m_tree.SetItemImage(m_hActiveParent, 0, 0);//先前活动父项更改图标
m_tree.SetItemImage(hSelItem, 2, 2);//当前活动子项更改图标
hItemParent = m_tree.GetNextItem(hSelItem, TVGN_PARENT);//获取当前子项的父项
m_tree.SetItemImage(hItemParent, 1, 1);//当前活动父项更改图标
m_hActiveChild = hSelItem;
m_hActiveParent = hItemParent;
m_list.DeleteAllItems();//删除所有列表项
m_list.InsertItem(0, "数学");//添加新行
m_list.SetItemText(0, 1, "70");
m_list.SetItemText(0, 2, "必修");
m_list.InsertItem(1, "物理");//添加新行
m_list.SetItemText(1, 1, "72");
m_list.SetItemText(1, 2, "必修");
m_list.InsertItem(2, "法语");//添加新行
m_list.SetItemText(2, 1, "72");
m_list.SetItemText(2, 2, "选修");
break;
}
case 4:
{
m_tree.SetItemImage(m_hActiveChild, 3, 3);//先前活动子项更改图标
m_tree.SetItemImage(m_hActiveParent, 0, 0);//先前活动父项更改图标
m_tree.SetItemImage(hSelItem, 2, 2);//当前活动子项更改图标
hItemParent = m_tree.GetNextItem(hSelItem, TVGN_PARENT);//获取当前子项的父项
m_tree.SetItemImage(hItemParent, 1, 1);//当前活动父项更改图标
m_hActiveChild = hSelItem;
m_hActiveParent = hItemParent;
m_list.DeleteAllItems();//删除所有列表项
m_list.InsertItem(0, "物理");//添加新行
m_list.SetItemText(0, 1, "70");
m_list.SetItemText(0, 2, "必修");
m_list.InsertItem(1, "电子技术");//添加新行
m_list.SetItemText(1, 1, "72");
m_list.SetItemText(1, 2, "必修");
m_list.InsertItem(2, "法语");//添加新行
m_list.SetItemText(2, 1, "72");
m_list.SetItemText(2, 2, "选修");
break;
}
case 5:
{m_tree.SetItemImage(m_hActiveChild, 3, 3);//先前活动子项更改图标
m_tree.SetItemImage(m_hActiveParent, 0, 0);//先前活动父项更改图标
m_tree.SetItemImage(hSelItem, 2, 2);//当前活动子项更改图标
hItemParent = m_tree.GetNextItem(hSelItem, TVGN_PARENT);//获取当前子项的父项
m_tree.SetItemImage(hItemParent, 1, 1);//当前活动父项更改图标
m_hActiveChild = hSelItem;
m_hActiveParent = hItemParent;
m_list.DeleteAllItems();//删除所有列表项
m_list.InsertItem(0, "生物");//添加新行
m_list.SetItemText(0, 1, "77");
m_list.SetItemText(0, 2, "必修");
m_list.InsertItem(1, "物理");//添加新行
m_list.SetItemText(1, 1, "72");
m_list.SetItemText(1, 2, "必修");
m_list.InsertItem(2, "法语");//添加新行
m_list.SetItemText(2, 1, "72");
m_list.SetItemText(2, 2, "选修");
break;
}
case 6:
{
m_tree.SetItemImage(m_hActiveChild, 3, 3);//先前活动子项更改图标
m_tree.SetItemImage(m_hActiveParent, 0, 0);//先前活动父项更改图标
m_tree.SetItemImage(hSelItem, 2, 2);//当前活动子项更改图标
hItemParent = m_tree.GetNextItem(hSelItem, TVGN_PARENT);//获取当前子项的父项
m_tree.SetItemImage(hItemParent, 1, 1);//当前活动父项更改图标
m_hActiveChild = hSelItem;
m_hActiveParent = hItemParent;
m_list.DeleteAllItems();//删除所有列表项
m_list.InsertItem(0, "哲学");//添加新行
m_list.SetItemText(0, 1, "90");
m_list.SetItemText(0, 2, "必修");
m_list.InsertItem(1, "物理");//添加新行
m_list.SetItemText(1, 1, "72");
m_list.SetItemText(1, 2, "必修");
m_list.InsertItem(2, "日语");//添加新行
m_list.SetItemText(2, 1, "75");
m_list.SetItemText(2, 2, "选修");
break;
}
}
//获取选中项的数据
if (m_hActiveParent && m_hActiveChild)
{
m_sTree = m_tree.GetItemText(m_hActiveParent) + " " + 
m_tree.GetItemText(m_hActiveChild);
this->UpdateData(FALSE);
}
*pResult = 0;
}
/*
typedef struct tagNMLISTVIEW
{
NMHDR hdr;
int iItem;
int iSubItem;
UINT uNewState;
UINT uOldState;
UINT uChanged;
POINT ptAction;
LPARAM lParam;
} NMLISTVIEW, FAR *LPNMLISTVIEW;
*/
void CTreeListDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code here
//NMLISTVIEW结构中的iItem和iSubItem标识出了你点击的是哪一行和哪一列
NMLISTVIEW * pNMListView = (NMLISTVIEW*)pNMHDR;
int nItem = pNMListView->iItem;
if (nItem == -1) return;
//先修改所有行的图标为0号图标
LVITEM lvItem;
for (int i = m_list.GetItemCount() - 1; i >= 0; i--)
{
lvItem.iItem = i; //第2行
lvItem.mask = LVIF_IMAGE; //图标
lvItem.iImage = 0; //0号图标
m_list.SetItem(&lvItem); //修改 点击行 的图标为0号图标
}
//再修改点击行的图标为1号图标
lvItem.iItem = nItem; //行
lvItem.mask = LVIF_IMAGE; //图标
lvItem.iImage = 1; //第2个
m_list.SetItem(&lvItem); //修改 点击行 的图标为1号图标
//获取点击行的学生成绩
CString s0 = m_list.GetItemText(nItem, 0);
CString s1 = m_list.GetItemText(nItem, 1);
CString s2 = m_list.GetItemText(nItem, 2);
m_sList = s0 + " " + s1 + " " + s2;
this->UpdateData(FALSE);
*pResult = 0;
}
void CTreeListDlg::OnBtnFocus() 
{
// TODO: Add your control notification handler code here 
GetDlgItem(IDC_EDIT_TREE)->SetFocus();
// ((CEdit *)GetDlgItem(IDC_EDIT_TREE))->SetSel(0, -1);
//::SendMessage(GetDlgItem(IDC_EDIT_TREE)->GetSafeHwnd(), WM_VSCROLL, SB_BOTTOM, NULL);
//::SendMessage(GetDlgItem(IDC_EDIT_TREE)->GetSafeHwnd(), WM_KEYDOWN, VK_END, NULL);
::SendMessage(m_ctrlEdit.m_hWnd, WM_KEYDOWN, VK_END, NULL);
// this->SendDlgItemMessage(IDC_EDIT_TREE, WM_KEYDOWN, VK_END, 0);
static bool bSwitch = true;
bSwitch = !bSwitch;
if (bSwitch)
m_list.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
else
m_list.ModifyStyle(LVS_TYPEMASK, LVS_LIST);
}