zedyqer
Tony丶Z
采纳率100%
2015-08-03 07:22 阅读 3.3k
已采纳

MFC中关于CTreeCtrl设置焦点到某一项上的问题

1

我做的是树控件的多选功能,在多选过程中,需要给新点击的项设置focus,只有下面这种情况,能保留多选的高亮
CTreeCtrl::SelectItem(hItem);
CTreeCtrl::SetItemState(hFocus, TVIS_SELECTED, TVIS_SELECTED);
CTreeCtrl::SelectItem(hItem);
其中hFocus是当前选中的item,hItem是要选中的item

这种情况实现的多选,在按住Ctrl取消之前的选择时,会消除之前这一项和他上一次选中项的高亮!目前的问题就是这个,求高人指点啊。

多选我参考的方案原代码是
CTreeCtrl::SelectItem(NULL); //will cause notify, but can be taken as focus change
CTreeCtrl::SetItemState(hFocus, TVIS_SELECTED, TVIS_SELECTED);
CTreeCtrl::SelectItem(hItem); //set focus (will consequently select, if not already focused)
这种在他的原解决方案里能实现多选效果,而且没问题,但是拿出来我用,就实现不了,他是用单文档实现的,我需要在mfc窗口中实现!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    zedyqer Tony丶Z 2015-08-05 08:14

    最后选了个折中的方法,多选时不去控制焦点,仍放到第一个选择的项上,单选时从新设置焦点

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2015-08-03 07:30

    树没有办法多选(高亮)
    除非你重绘,不过更好的办法是给tree加上checkbox

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2015-08-03 07:30
  • sniper_bing 蜗牛的信仰 2015-08-04 01:34

    可以考虑自绘, 自己控制

    点赞 评论 复制链接分享
  • sniper_bing 蜗牛的信仰 2015-08-04 01:37

    他的第一句CTreeCtrl::SelectItem(NULL); 先取消选中

    点赞 评论 复制链接分享

相关推荐