MFC控制树
简介
GetContextMenuManager()->AddMenu();添加自定义菜单
上句主要是在C_App的PreLoadState()中调用,预先加载好所需要的右键快捷菜单
GetContextMenuManager()->ShowPopupMenu()显示自定义菜单。
在加载好右键快捷菜单之后,当需要显示时,直接调用
注:GetContextMenuManager()是CWinAppEx的类方法
控制树部分:
CDockablePane是一个通用窗口容器,它主要有两个用途:在一个框架中悬浮或者停靠窗口,MFC默认生成的文件控制窗口CFileView,就是CDockablePane的派生类;可以在CDockablePane派生类中加对话框对象,实现在该容器中存放一个窗口。
CFileView中有CViewTree,CViewTree只是CTreeCtrl的简单封装,控制树节点控制等等,都是封装在CTreeCtrl中。
控制树详细控制:
http://blog.****.net/wang15061955806/article/details/51820385
http://blog.****.net/bruce_zeng/article/details/8046098
例子:
http://blog.****.net/qq_23992597/article/details/51395957
其中对于树的鼠标响应消息有两个:NM_CLICK、TVN_SELCHANGED,两者的区别参考:
https://blog.****.net/pipi0714/article/details/23439861
MFC默认生成的有文件控制树(CFileView)、类控制树(CClassView),二者被定义为CMainFrame成员,在CMainFrame源文件中完成定义,
在CreateDockingWindows()中完成create,
在SetDockingWindowIcons()中添加图标,
在OnCreate()中完成绑定,Create()函数中定义如下:
m_wndFileView.EnableDocking(CBRS_ALIGN_ANY);
m_wndClassView.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndFileView);
DockPane(&m_wndClassView);
CDockablePane* pTabbedBar = NULL;
m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar);
一个例子
该例子是某位大佬做的,工程是基于对话框的MFC工程,,其效果图如下:
大致思路:首先创建一个类VividTree,该类是CTreeCtrl派生类;为该对话框插入Tree Control控件,为该控件绑定变量(m_tree),其类型为VividTree(代码为DDX_Control(pDX, IDC_TREETEST, m_tree)),之后该控制树的背景设置、子树插入等等操作都通过m_tree变量操作。
源代码:https://www.codeproject.com/Articles/11722/VividTree-A-Colorful-and-Picturesque-Owner-Drawn-C