第一步:在向导中给你的树形控件关联一个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")
}
}
这是另外一个问题我给的回答,请参考。
http://zhidao.baidu.com/question/154478573.html
1.添加树形视图控件2.用向导创建其成员变量CTreeCtrl
m_trdisktree
3.创建TVN_
SELCHANGED响应事件,Edit
Code键
4.代码如下
void
CDiskCataDlg::OnSelchangedTrdisktree(NMHDR*
pNMHDR,
LRESULT*
pResult)
{
NM_TREEVIEW*
pNMTreeView
=
(NM_TREEVIEW*)pNMHDR
CFileFind
filefd
HTREEITEM
parent
HTREEITEM
rootitem=m_trdisktree.GetSelectedItem()
if(m_trdisktree.GetChildItem(rootitem))return
parent=rootitem
CString
rootstr=m_trdisktree.GetItemText(rootitem)
CString
temp
CString
lstr
if(rootstr.Find("\\")==2)
{
lstr.Format("%s*.*",rootstr)
}
else
{
CString
strparent
while(1)
{
parent=m_trdisktree.GetParentItem(parent)
strparent=m_trdisktree.GetItemText(parent)
if(strparent.Find("\\")==2)
goto
end
temp+=strparent
temp+="\\"
}
end:
CString
root=m_trdisktree.GetItemText(parent)
lstr.Format("%s%s%s\\*.*",root,temp,rootstr)
}
BOOL
bfinded=filefd.FindFile(lstr)
while(bfinded)
{
bfinded=filefd.FindNextFile()
CString
filepath
if(filefd.IsDirectory()&&!filefd.IsDots()){
SHGetFileInfo(filefd.GetFilePath(),0,&fileinfo,sizeof(fileinfo),
SHGFI_ICON)
imindex=imlst.Add(fileinfo.hIcon)
m_trdisktree.InsertItem(filefd.GetFileName(),imindex,imindex,rootitem)
}
}
*pResult
=
0
}
看完这段代码,就一定会啦
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)