hur.cn - 华软网

 热门搜索

鼠标无法选中树控件中的元素

  作者:未知    来源:网络    更新时间:2011/8/13
我创建了一个MFC单文档程序,在程序的处理过程中,我将两个对话框浮动显示在窗口上,效果如下图:
[img=http://hi.csdn.net/space-3611106-do-album-picid-889711.html][/img]
开始时,没有右边的站点线路图,它是后来加的。左边的图层管理,实现的是若选中某一项,则对应选项的物体会被绘制在中间的场景中,右边的线路图实现的是点击一个站点实现中间场景的切换。
没有线路图时,程序是正常运行的。加了线路图这个对话框后,左边的对话框的树控件对鼠标点击不响应了。
处理鼠标点击的代码如下:
C++">
GetCursorPos(&point);
m_Tree.ScreenToClient(&point);

UINT hitState = NoState;

HTREEITEM hitItem = m_Tree.HitTest(point, &nFlags); // 被点击的节点
HTREEITEM hChild; // 被点击节点的子节点
HTREEITEM hParent; // 被点击节点的父节点

// 被点击区域为节点的复选框
if(NULL != hitItem && (nFlags & TVHT_ONITEMSTATEICON))                                              
{
// 获取其第一个子节点
hChild = m_Tree.GetChildItem(hitItem); 

// 获取其父节点
hParent = m_Tree.GetParentItem(hitItem);                 

// 获取其状态,>>12表示除以2^12
hitState = m_Tree.GetItemState(hitItem,TVIS_STATEIMAGEMASK)>>12;   

// 被点击后,该节点的状态发生改变
switch(hitState)
{
// 点击之前为“部分选择”,则切换成“全部选择”
case PartCheck:
SetFamilyState(hitItem,AllCheck);
break;

// 点击之前为“全部选择”,则切换为“未选”
case AllCheck:
SetFamilyState(hitItem,NoneCheck);
break;

// 点击之前为“未选”,则切换为“全部选择”
case NoneCheck:
SetFamilyState(hitItem,AllCheck);
break;

default:
break;
}

// 一个节点状态发生变化时,需重置所有节点(除兄弟节点外)状态
ResetAllItem(hitItem);                                
}

加了线路对话框后运行到
HTREEITEM hitItem = m_Tree.HitTest(point, &nFlags); // 被点击的节点
就出现错误了。加了线路对话框后到这块hitItem就变成了0!
实在搞不懂究竟问题在那。望高手能够指点一二!
---华软 网友回答---
加了线路图这个对话框后,左边的对话框的树控件对鼠标点击不响应了
--------------------
你是说NM_CLICK响应没有响应?NM_CLICK事件是通过WM_NOTIFY消息传递的,你的NM_CLICK消息响应是在CTreeCtrl控件的父窗口类对话框中添加的吗?
---华软网友回复---
每天回帖即可获得10分可用分
---华软网友回复---
引用 1 楼 visualeleven 的回复:
加了线路图这个对话框后,左边的对话框的树控件对鼠标点击不响应了
--------------------
你是说NM_CLICK响应没有响应?NM_CLICK事件是通过WM_NOTIFY消息传递的,你的NM_CLICK消息响应是在CTreeCtrl控件的父窗口类对话框中添加的吗?
恩,我的NM_CLICK消息是在树控件所在的对话框添加的      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。