CTreeCtrl控件添加排序功能

这篇博客介绍了如何在MFC的CTreeCtrl控件中添加排序功能,包括通过右键菜单选择排序方式以及自定义排序规则。作者首先讲解了如何弹出菜单,通过子类化CTreeCtrl,响应WM_CONTEXTMENU消息,并处理菜单项的选择。接着,文章详细阐述了如何实现自定义排序,特别是使用SortChildrenCB函数和自定义比较函数SortByTypeCallBack来根据类型进行排序。
摘要由CSDN通过智能技术生成

       由于项目需要,要使用MFC。记录下平时遇到的问题。

       需求是在CTreeCtrl添加按类型,名字排序功能。其中类型是编辑器内部定义的。

       我的做法是通过鼠标右键单击,弹出一个菜单。菜单提供两个选项:按类型、按名字排序。

      这里遇到2个知识点:1. 如何弹出菜单。2. 如何排序

 

1. 弹出菜单:

      由于需要提供其他的特殊功能,我子类化了CTreeCtrl。 通过VS的ClassView找到这个子类,添加WM_CONTEXTMENU消息的响应函数。注意这里并不是添加WM_RBUTTON系列的响应函数。因为右键弹开菜单这个消息并不只是通过右键触发,还可以通过键盘的属性键,shift +f10触发。

  添加新菜单资源,起名为IDR_MENU_SORT,WM_CONTEXTMENU消息的响应函数加入如下代码:

  CPoint point;
   GetCursorPos(&point);
   CMenu menu;
   menu.LoadMenu(IDR_MENU_SORT);
   menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN |
                             TPM_RIGHTBUTTON, point.x, point.y, this);
   menu.DestroyMenu();

  这样就可以弹出菜单了。

  下一步是选择菜单项的响应函数,重载OnCommand函数,在函数内部判断UINT nID = LOWORD(wParam); 为菜单的哪一项,写对应的逻辑。

  完成后会出现一个现象。右键单击不会弹出菜单&#x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值