VC++中 mfc在tree control各个子项目如何添加响应函数

VC++中 mfc在tree control各个子项目如何添加响应函数,第1张

很简单:

第一步:在向导中给你的树形控件关联一个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

}

看完这段代码,就一定会啦


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11887393.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存