我的Treeview,鼠标点击结点时,为何点不准?我已经知道原因,但我不知道要怎么解决。

mfcdeclare 2006-07-11 09:54:35
选择tree的结点的代码大概如下:
void CFileTreeView::OnLButtonDown(UINT nFlags, CPoint point)
{
UINT position=0;

//得到当前结点的句柄(m_itm)
m_itm=treeFile.HitTest(point,&position);

if(position&TVHT_ONITEM ) //如果点在了选项上,即点在树结点的图标上

{
treeFile.SelectItem(m_itm);//其中m_itm表示当前点击的结点的句柄

DeleteChildItem(m_itm);//当m_itm结点有孩子结点,并处于展开状态时,每次显示时,删除原有子结点的操作

......//下面的操作就是为m_itm添加子结点的操作,并显示出来
......
}
}

上面代码的关键是DeleteChildItem()这个函数,即每次点击m_itm结点时,我要删除掉这个结点的孩子结点(设计要求决定),执行完这个函数后,我要立即为m_itm这个结点添加孩子结点(相当于刷新)。

如果我的tree没有上下的滚动条,上面的代码完全正常。可是当出现上下的滚动条后(展开结点后,子结点可能会比较多,tree会自动添加滚动条)。再执行上面的代码,会出现点击位置不准确的情况,鼠标点击的位置会跑焦点(我想这不太容易用语言表达清楚)


经过测试,我的分析如下:因为删除子结点后,还没等我添加新的子结点,这时上下的滚动条可能会暂时消失(因为删除掉子结点后,可能就不再需要滚动条了,树的客户区大小足以显示所有的结点),通过测试也能知道当前的结点确实是m_itm(假设这个结点的text为"文件夹1"),可是奇怪的是,从界面上看,当前的结点却不是m_itm("文件夹1),而是点在了别处。

怎么解决这个问题呢?谢谢 ~~~

...全文
188 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhyytt 2006-07-11
  • 打赏
  • 举报
回复
顶以下,学习。
我想是否应该刷新一下Tree视图。
960379 2006-07-11
  • 打赏
  • 举报
回复
我怀疑这种现象和滚动条无关。最有可能的还是在delete以及add操作以后,当前节点句柄指针发生了变化。你可以在delete和add操作完毕以后,重新强制选中你需要选中的那个节点(多一次遍历)。
lixiaosan 2006-07-11
  • 打赏
  • 举报
回复
试试
m_tree.SetRedraw(TRUE);
m_tree.UpdateWindow();



16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧