第一步:在向导中给你的树形控件关联一个CTreeCtrl的变量(就像你代码中的m_Mess)
第二步:在向导中,添加该树形控件的NM_Click消息(就是鼠标单击消息,以下假设函数名为OnClickTree)
第三步:在代码中添加你的数据(主要是在初始化树形控件的数据的函数中,如你代码中的OnInitDialog()就可以)
HTREEITEM hRoot = m_ctrlTree.InsertItem("北京")
m_ctrlTree.SetItemData(hRoot, 1)
HTREEITEM hChild = m_ctrlTree.InsertItem("朝阳区", hRoot)
m_ctrlTree.SetItemData(hChild, 2)
hChild = m_ctrlTree.InsertItem("海淀区", hRoot)
m_ctrlTree.SetItemData(hChild, 3)
注意:我在上面用了SetItemData函数,主要是给不同的节点添加不同的标记
,在下面的单击消息函数中就可以看出它的作用
第四步:在OnClickTree函数中添加鼠标单击消息响应代码
CPoint pt = GetCurrentMessage()->pt //获取当前鼠标点击消息的坐标点
m_ctrlTree.ScreenToClient(&pt) //将鼠标的屏幕坐标,转换成树形控件的客户区坐标
UINT uFlags = 0
HTREEITEM hItem = m_ctrlTree.HitTest(pt, &uFlags)//然后做点击测试
if ((hItem != NULL) &&(TVHT_ONITEM &uFlags))//如果点击的位置是在节点位置上面
{
m_ctrlTree.SelectItem(hItem)
//获取开始我们设置的数据,注意这就是我为什么开始要每个节点设置不同的数据的原因。当然,如果你的数据节点比较少,你也可以通过获取节点的文字,如上面设置的"海淀区",然后通过字符串比较来判断点击了哪个节点
int nDat = m_ctrlTree.GetItemData(hItem)
//然后根据不同的节点,你完成不同的动作即可
switch (nDat)
{
case 1:
AfxMessageBox("北京")
break
case 2:
AfxMessageBox("北京->朝阳区")
break
case 3:
AfxMessageBox("北京->海淀区")
break
default:
AfxMessageBox("ERROR")
}
m_TreeCtrl Control CTreeCtrl同时利用“MESSAGES MAP”为各命令按钮增加控制功能函数。
然后在代码文件VCTREEDlg.CPP中分别加入如下控制代码:
(1)在文件开始处增加图像列表定义
CImageList Cil1,Cil2//大小图标像列表
(2)在初始化文件开始处增加代码
BOOL CVCTREEDlg::OnInitDialog()
{ CDialog::OnInitDialog()
.....//原来其它代码
// TODO: Add extra initialization here
// 此处开始增加代码
CVCTREEApp *pApp=(CVCTREEApp *)AfxGetApp()//创建图象列表
Cil1.Create(16,16,ILC_COLOR,2,2)
Cil1.Add(pApp->LoadIcon(IDI_PM))
Cil1.Add(pApp->LoadIcon(IDI_CJ))
m_TreeCtrl.SetImageList(&Cil1,TVSIL_NORMAL) //设置图象列表
DWORD dwStyles=GetWindowLong(m_TreeCtrl.m_hWnd,GWL_STYLE)//获取树控制原风格
dwStyles|=TVS_EDITLABELS|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT
SetWindowLong(m_TreeCtrl.m_hWnd,GWL_STYLE,dwStyles)//设置风格
char * CJ[4]={"玉溪卷烟厂","云南卷烟厂","沈阳卷烟厂","成都卷烟厂"}//根数据名称
char * PM[4][5]={
{"红梅一","红梅二","红梅三","红梅四","红梅五"},//产品数据项
{"白梅一","白梅二","白梅三","白梅四","白梅五"},
{"绿梅一","绿梅二","绿梅三","绿梅四","绿梅五"},
{"青梅一","青梅二","青梅三","青梅四","青梅五"}}
int i,j
HTREEITEM hRoot,hCur//树控制项目句柄
TV_INSERTSTRUCT TCItem//插入数据项数据结构
TCItem.hParent=TVI_ROOT//增加根项
TCItem.hInsertAfter=TVI_LAST//在最后项之后
TCItem.item.mask=TVIF_TEXT|TVIF_PARAM|TVIF_IMAGE|TVIF_SELECTEDIMAGE//设屏蔽
TCItem.item.pszText="数据选择"
TCItem.item.lParam=0//序号
TCItem.item.iImage=0//正常图标
TCItem.item.iSelectedImage=1//选中时图标
hRoot=m_TreeCtrl.InsertItem(&TCItem)//返回根项句柄
for(i=0i<4i++){//增加各厂家
TCItem.hParent=hRoot
TCItem.item.pszText=CJ[i]
TCItem.item.lParam=(i+1)*10//子项序号
hCur=m_TreeCtrl.InsertItem(&TCItem)
for(j=0j<5j++){//增加各产品
TCItem.hParent=hCur
TCItem.item.pszText=PM[i][j]
TCItem.item.lParam=(i+1)*10+(j+1)//子项序号
m_TreeCtrl.InsertItem(&TCItem)
}
m_TreeCtrl.Expand(hCur,TVE_EXPAND)//展开树
}
m_TreeCtrl.Expand(hRoot,TVE_EXPAND)//展开上一级树
return TRUE // return TRUE unless you set the focus to a control
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)