由于项目需要,要使用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