以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 支持数据项查询功能地树控制(CTreeCtrl)类 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=51571) |
-- 作者:卷积内核 -- 发布时间:8/20/2007 4:25:00 PM -- 支持数据项查询功能地树控制(CTreeCtrl)类 一、树控制(CTree Control) 二、使用树控制 三、让树控制支持数据项查找功能 /*************************************************************** * * 名称:FindItem * * 功能:在树控制中根据数据项名称查找数据项 * * 参数:item - 要查询的数据项及其子数据项 * * strText - 要查询的数据项名称 * * 返回值:NULL - 没找到 * * (非空的HTREEITEM ) - 找到 * ***************************************************************/ HTREEITEM CTreeCtrlEx::FindItem(HTREEITEM item, CString strText) { HTREEITEM hFind; if(item == NULL) return NULL; while(item!=NULL) { if(GetItemText(item) == strText) return item; if(ItemHasChildren(item)) { item = GetChildItem(item); hFind = FindItem(item,strText); if(hFind) { return hFind; } else { item= GetNextSiblingItem(GetParentItem(item)); } } else { item = GetNextSiblingItem(item); if(item==NULL) return NULL; } } } 四、示例程序 CONTROL),并设置一个按钮“新建数据项”,其对应标识分别如下:
控制名称 标题名称 标识符号 对应成员变量或函数
树控制
IDC_MYTREE CTreeCtrl m_ctrlTree
按钮 新建数据项 IDC_ NEWITEM OnNewitem()
树控制项目
HTREEITEM m_hInsertItem
(3) 处理树控制的TVN _BEGINLABELEDIT和TVN _ENDLABELEDIT消息,CMyTreeCtrlDlg增加OnBeginlabeleditMytree和OnEndlabeleditMytree两个处理函数。 void CMyTreeCtrlDlg::OnBeginlabeleditMytree(NMHDR* pNMHDR, LRESULT* pResult) { TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR; // TODO: Add your control notification handler code here m_ctrlTree.GetEditControl()->LimitText(16); *pResult = 0; } { TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR; // TODO: Add your control notification handler code here CString strName; m_ctrlTree.GetEditControl()->GetWindowText(strName); if(strName.IsEmpty()) { AfxMessageBox(_T("数据项名称不能为空,请重新输入!")); CEdit* pEdit = m_ctrlTree.EditLabel(m_hInsertItem); ASSERT(pEdit != NULL); return; } HTREEITEM hFind = m_ctrlTree.FindItem(hRoot,strName); if(hFind==NULL) { char msg[64]={0}; sprintf(msg,"新添加数据项名称 %s ,确定吗?",strName); if(MessageBox(msg,_T("提示"),MB_OKCANCEL) == IDOK) *pResult = TRUE; else m_ctrlTree.DeleteItem(m_hInsertItem); } else { AfxMessageBox(_T("该数据项已存在,请重新输入!")); CEdit* pEdit = m_ctrlTree.EditLabel(m_hInsertItem); ASSERT(pEdit != NULL); *pResult = 0; } } 五、结束语 下载本文示例源代码 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
78.125ms |