VC++树,单击节点事件
绝对新手提问,请详细解释添加了一个树控件如:北京--朝阳区--海淀区我要实现的功能是:单击朝阳区,在FORM内,树的右边显示一些控件,用来添加朝阳区的信息单击海淀区,功能...
绝对新手提问,请详细解释
添加了一个树控件
如:
北京
--朝阳区
--海淀区
我要实现的功能是:
单击 朝阳区,在FORM内,树的右边显示一些控件,用来添加朝阳区的信息
单击 海淀区,功能如上。
现在我不懂的是,如何添加单击事件,比如:
BOOL CCTree_sampDlg::OnInitDialog()
{
HTREEITEM beij = m_Mess.InsertItem("北京",0,0);
m_Mess.InsertItem("朝阳区",1,1,beij);
。。。。。
}
1。单击事件是应该添加上边的代码里边吗?
2。如果不是,应该在哪里添加?
3。添加之前,用不用添加成员变量?
4。用不用添加新类?
5。如果添加类,在哪里添加?
我是新手,需要详细的答案,谢谢,如果答案通过,另有分数奉送。 展开
添加了一个树控件
如:
北京
--朝阳区
--海淀区
我要实现的功能是:
单击 朝阳区,在FORM内,树的右边显示一些控件,用来添加朝阳区的信息
单击 海淀区,功能如上。
现在我不懂的是,如何添加单击事件,比如:
BOOL CCTree_sampDlg::OnInitDialog()
{
HTREEITEM beij = m_Mess.InsertItem("北京",0,0);
m_Mess.InsertItem("朝阳区",1,1,beij);
。。。。。
}
1。单击事件是应该添加上边的代码里边吗?
2。如果不是,应该在哪里添加?
3。添加之前,用不用添加成员变量?
4。用不用添加新类?
5。如果添加类,在哪里添加?
我是新手,需要详细的答案,谢谢,如果答案通过,另有分数奉送。 展开
展开全部
很简单:
第一步:在向导中给你的树形控件关联一个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");
}
}
//要是这样还搞不定你的问题,我真就无语了,给分吧,老大,哈哈哈哈哈
第一步:在向导中给你的树形控件关联一个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");
}
}
//要是这样还搞不定你的问题,我真就无语了,给分吧,老大,哈哈哈哈哈
展开全部
ctrl+w 打开类向导,在里面找你要添加响应的资源ID,然后再点击该ID对应的消息,再添加函数即可,都是类向导自动给你添加好的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
开始学阶段还是按照参考书上一步步实现,弄多了熟了自然就会了,你这样在这里问我想对你的编程能力不会有很大的提高,在这里只有把问题贴出来让大家帮忙分析解决你才会学到东西。希望你能够有所改进,学习进步啦。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询