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

VC++中mfc在treecontrol各个子项目如何添加响应函数,如点击某一节点时弹出一个新窗口。... VC++中 mfc在tree control各个子项目如何添加响应函数,如点击某一节点时弹出一个新窗口。 展开
 我来答
qgdeng
推荐于2016-11-20 · TA获得超过112个赞
知道答主
回答量:44
采纳率:0%
帮助的人:65.3万
展开全部
很简单:
第一步:在向导中给你的树形控件关联一个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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式