首页 > 代码库 > 树控件CTreeCtrl 创建与双击响应
树控件CTreeCtrl 创建与双击响应
函数功能:创建一个树控件,并实现双击节点响应事件。
响应方法:在树控件上增加双击响应事件。
代码:
1.在OnInitDialog中: CTreeCtrl *ctreectrl = (CTreeCtrl *)GetDlgItem(IDC_TREE1); //调用ModifyStyle方法修改数控件Sytle ctreectrl->ModifyStyle(0,TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS); //设置树控件字体颜色 ctreectrl->SetTextColor(RGB(0,0,255)); //设置树控件背景颜色 ctreectrl->SetBkColor(RGB(0,255,0)); //添加根节点root HTREEITEM root = ctreectrl->InsertItem(_T("root")); ctreectrl->SetItemData(root,1); //添加父节点parent1和parent2 HTREEITEM parent1 = ctreectrl->InsertItem(_T("parent1")); ctreectrl->SetItemData(parent1,2); HTREEITEM parent2 = ctreectrl->InsertItem(_T("parent2")); ctreectrl->SetItemData(parent2,3); //添加根节点root的子节点rootchild HTREEITEM rootchild = ctreectrl->InsertItem(_T("rootchild"),root); ctreectrl->SetItemData(rootchild,4); //添加父节点parent1的子节点 HTREEITEM child1 = ctreectrl->InsertItem(_T("child1"),parent1); ctreectrl->SetItemData(child1,5); HTREEITEM child2 = ctreectrl->InsertItem(_T("child2"),parent1,child1); ctreectrl->SetItemData(child2,6); HTREEITEM child3 = ctreectrl->InsertItem(_T("child3"),parent1,child2); ctreectrl->SetItemData(child3,7); //添加父节点parent2的子节点 HTREEITEM child11 = ctreectrl->InsertItem(_T("child11"),parent2); ctreectrl->SetItemData(child11,8); HTREEITEM child22 = ctreectrl->InsertItem(_T("child22"),parent2,child11); ctreectrl->SetItemData(child22,9); HTREEITEM child33 = ctreectrl->InsertItem(_T("child33"),parent2,child22); ctreectrl->SetItemData(child33,10);
2.利用ClassWizard增加树控件双击响应事件: void CCTreeCtrlDemo2Dlg::OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here CTreeCtrl *ctreectrl = (CTreeCtrl *)GetDlgItem(IDC_TREE1); // 第四步:在OnDClickTree函数中添加鼠标单击消息响应代码 //获取当前鼠标点击消息的坐标点 CPoint pt = GetCurrentMessage()->pt; //将鼠标的屏幕坐标,转换成树形控件的客户区坐标 ctreectrl->ScreenToClient(&pt); UINT uFlags = 0; HTREEITEM hItem = ctreectrl->HitTest(pt, &uFlags);//然后做点击测试 //HitTest一般是指鼠标点击位置上是哪个树结点,从而得到鼠标位置的树结点 if ((hItem != NULL) && (TVHT_ONITEM & uFlags))//如果点击的位置是在节点位置上 { ctreectrl->SelectItem(hItem); //获取开始我们设置的数据,注意这就是我为什么开始要每个节点设置不同的数据的原因。 //当然,如果你的数据节点比较少,你也可以通过获取节点的文字,如上面设置的"root,parent1,parent2······", //然后通过字符串比较来判断点击了哪个节点 int nDat = ctreectrl->GetItemData(hItem); //然后根据不同的节点,你完成不同的动作即可 switch (nDat) { case 1: MessageBox("root"); break; case 2: MessageBox("parent1"); break; case 3: MessageBox("parent2"); break; case 4: MessageBox("rootchild"); break; case 5: MessageBox("child1"); break; case 6: MessageBox("child2"); break; case 7: MessageBox("child3"); break; case 8: MessageBox("child11"); break; case 9: MessageBox("child22"); break; case 10: MessageBox("child33"); break; default: MessageBox("ERROR"); } *pResult = 0; } }
本文出自 “whatever957” 博客,请务必保留此出处http://whatever957.blog.51cto.com/6835003/1565073
树控件CTreeCtrl 创建与双击响应
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。