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

mfcdeclare mfcdeclare 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
选择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),而是点在了别处。

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

...全文

相关推荐

攻防世界 - Misc - Level 3 - 打开电动车

本题考察的是 Misc 中的音频隐写题目,想要通过本关,你需要知道以下知识: - 常见的 “固定码遥控信号” 的构成。 - PT226X:4 Bit 同步码 + 8 Bit 地址位 + 4 Bit 数据位 + 1Bit 停止码。 - PT224X:8 Bit 同步码 + 20 Bit 地址位 + 4 Bit 数据位 + 1Bit 停止码。 - 使用 Audacity 查看音频的 “波形图”(并会进行放大操作,Ctrl + 鼠标滚轮)。

Blue17 :: Hack3rX

diffusion-models.7z.058

diffusion-models.7z.058

WSH_SRE

技术供需对接效率低?AI智能匹配让技术转移告别碰运气.docx

技术供需对接效率低?AI智能匹配让技术转移告别碰运气

BIZKEEN

CSV清洗工具 - CSV数据批量清洗与格式整理软件

批量清洗CSV数据:删除空行空列、去除重复行、清理多余空格、统一编码与换行符,自动检查异常数据并生成清单,让表格数据干净可用。 主要功能:批量删除CSV空行、一键移除空列、去除重复数据行、保留首条或末条记录、清理单元格首尾空格、压缩内部多余空格、统一换行符格式、自动检查异常数据。 适用场景:CSV清洗工具是一款面向普通用户的本地CSV数据清洗软件,解决表格数据中常见的空行、空列、重复记录、多余空格与格式混乱问题。无论数据来自系统导出、电商后台还是问卷统计,只需把文件拖进窗口、勾选清洗选项,即可得到一份干净规范的新CSV文件。全程本地处理,数据不出本机。 说明:【试用与付费说明】本软件的全部清洗选项设置与文件管理功能均可直接使用;导出清洗结果(生成清洗后的CSV文件)需一次性付费解锁,解锁后永久可用,无订阅、无时长限制。

RPA知识课堂

国央企创新负责人如何实现科技创新资源的多维度整合与高效配置?.docx

国央企创新负责人如何实现科技创新资源的多维度整合与高效配置?

BIZKEEN
评论 3
收藏 已收藏
分享
返回顶部
mfcdeclare
VC/MFC 16,550 成员 421,606 内容