CTreeCtrl的一个小技巧

前两天从网上(http://www.techsoft.no/bendik/)下载了一个CTreeCtrl得一个继承类,可以实现多选功能,不过有一个小问题,就是多选右键弹出菜单后,多选的的item显示出了问题:对着其中的一个selected item右键,会发现最后选中的那个item的选中状态(蓝色背景)没有了,感觉很奇怪,并且发现该项还在选中的列表中。于是跟踪一下(一上午)。发现了一个小窍门可以解决此问题:

利用itemTVIS_DROPHILITED状态,具体代码如下:

 

     vector<HTREEITEM> vcItems;

         HTREEITEM hSelItem = pTreeCtrl->GetFirstSelectedItem();

         while(hSelItem)

         {

              vcItems.push_back(hSelItem);

              hSelItem = pTreeCtrl->GetNextSelectedItem(hSelItem);

         }

 

         for(vector<HTREEITEM>::iterator it = vcItems.begin(); it != vcItems.end(); ++it)

         {

              pTreeCtrl->SetItemState(*it, TVIS_DROPHILITED, TVIS_DROPHILITED);

         }   

 

         menu.TrackPopupMenu(TPM_LEFTALIGN, ptHere.x, ptHere.y, m_pParentWnd);

 

         for(vector<HTREEITEM>::iterator it = vcItems.begin(); it != vcItems.end(); ++it)

         {

              pTreeCtrl->SetItemState(*it, ~TVIS_DROPHILITED, TVIS_DROPHILITED);

         }   

 

在要弹出菜单前,先记录所有的item state, 然后设置TVIS_DROPHILITED状态,然后在弹出菜单后复原即可。

这里的弹出菜单,如果换成弹出dialogbox也会有类似问题。解决方法同上代码。

 

总结:这里没有什么技巧可言,就是觉得这个问题应该能够解决,测试了半天终于搞定了,验证了那句老话,坚持就是胜利。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值