为树形控件添加弹出式菜单,并跟踪所选择的项

简介: [cpp] view plaincopy   为树形控件添加弹出式菜单,并跟踪所选择的项   [cpp] view plaincopy   动态弹出式菜单   [cpp] view plaincopy    //获取当前...
[cpp]  view plain copy
 
  1. <span style="font-size:24px;color:#ff0000;">为树形控件添加弹出式菜单,并跟踪所选择的项</span>  
[cpp]  view plain copy
 
  1. 动态弹出式菜单  
[cpp]  view plain copy
 
  1.  //获取当前右键的位置  
  2. CPoint pt;     
  3. GetCursorPos(&pt);     
  4. m_tree.ScreenToClient(&pt);  
  5.       
  6. //判断右键的位置处是否是树形控件的一个节点  
  7. //若有,则弹出右键菜单  
  8. HTREEITEM   hItem   =   m_tree.HitTest(pt);  
  9. if(m_tree.GetParentItem(m_tree.GetParentItem(hItem))!=NULL&&m_tree.GetChildItem(hItem)!=NULL)  
  10.    bShouldPop=TRUE;  
  11. if(hItem != NULL && bShouldPop)  
  12. {  
  13.    m_tree.SelectItem(hItem);  
  14.   
  15. //弹出菜单的位置,为后面的 TrackPopupMenu() 使用  
  16. GetCursorPos(&pt);  
  17.   
  18. CMenu popupmenu;  
  19. //生成一个弹出菜单  
  20. popupmenu.CreatePopupMenu();  
  21. ASSERT(popupmenu!=NULL);  
  22.   
  23. //添加菜单项  
  24. popupmenu.AppendMenu(MF_STRING|MF_ENABLED,IDM_ITEM_SHOW,_T("show"));  
  25. popupmenu.AppendMenu(MF_SEPARATOR);  
  26. popupmenu.AppendMenu(MF_STRING|MF_ENABLED,IDM_ITEM_HIDE,_T("hide"));  
  27. //弹出  
  28. int nCmd=(int)popupmenu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,  
  29.    pt.x,pt.y,this);  
  30.    }  
  31.   
  32. 也可以用已有的菜单资源弹出一个菜单的子项  
[cpp]  view plain copy
 
  1. void CLeaveDlg::OnRclickTree(NMHDR* pNMHDR, LRESULT* pResult)   
  2. {  
  3.     // TODO: Add your control notification handler code here  
  4.     CMenu menu;  
  5.     menu.LoadMenu(IDR_MENU_SHOW);  
[cpp]  view plain copy
 
  1. CBitmap bitmap; //为菜单子项添加图标  
  2. bitmap.LoadBitmap(IDB_BITMAP_BIG);  
  3.   
  4. deviceTreeMenu.SetMenuItemBitmaps(IDC_MENU_DEVICE_RENAME,MF_BYCOMMAND/*|MF_BYPOSITION*/,  
  5. &bitmap,&bitmap);   
[cpp]  view plain copy
 
  1.     //获取当前右键的位置  
  2.     CPoint pt;  
  3.     GetCursorPos(&pt);  
  4.     m_tree.ScreenToClient(&pt);  
  5.     HTREEITEM hSelTree = m_tree.HitTest(pt);  
  6.     if ( hSelTree != NULL && m_tree.GetParentItem(hSelTree) != NULL )  
  7.     {  
  8.         m_tree.SelectItem(hSelTree);  
  9.         m_tree.ClientToScreen(&pt);  
  10.         menu.GetSubMenu(1)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this);  
  11.     }  
  12.     *pResult = 0;  
  13. }  
[cpp]  view plain copy
 
  1.   


 动态创建菜单步骤:

1创建一个基于对话框的应用程序
2在对话框的头文件中声明一个CMenu类对象m_Menu;
3打开Resource.h,在此文件中定义命令ID。代码为:#define ID_MENUCAT 1001
4在对话框的OnInitDialog方法中创建菜单。代码如下:
m_Menu.CreateMenu(); //创建菜单窗口
CMenu m_PopMenu; //定义菜单类对象
m_PopMenu.CreatePopupMenu(); //创建弹出菜单窗口
m_Menu.AppendMenu(MF_POPUP,(UINT)m_PopMenu.m_hMenu,"动物");//插入菜单
m_PopMenu.AppendMenu(MF_STRING,ID_MENUCAT,"猫"); //插入子菜单
m_PopMenu.Detach(); //分离菜单句柄
SetMenu(&m_Menu);//菜单与窗口关联
5在对话框的头文件中声明菜单的消息处理函数,代码为 afx_msg void OnMenucat();
6在对话框的源文件中添加消息映射宏,将命令ID关联到消息处理函数中。代码如下:
  ON_COMMAND(ID_MENUCAT, OnMenucat) //关联命令ID和消息处理函数


7最后一步,在对话框的源文件中添加消息处理函数的实现代码
void CCreateMenuDlg::OnMenucat()
{
MessageBox("猫菜单被按下");
}

目录
相关文章
|
存储 安全 数据安全/隐私保护
讲解移动应用中的用户认证和授权。
【4月更文挑战第1天】移动应用开发重在用户认证和授权,确保安全和体验。认证涉及用户名密码、短信验证码、第三方登录和生物特征,其中生物特征安全便捷但受限于硬件。授权管理通过角色或细粒度权限控制用户操作。OAuth用于第三方授权,SSO简化登录。多因素认证增强安全性。开发者需平衡安全与体验,保护用户隐私。
398 0
|
SQL NoSQL Java
信创迁移适配预研-SpringBoot连接达梦数据库DM8服务并在IDEA中连接
信创迁移适配预研-SpringBoot连接达梦数据库DM8服务并在IDEA中连接
2161 0
信创迁移适配预研-SpringBoot连接达梦数据库DM8服务并在IDEA中连接
|
12月前
|
Python
Python办公自动化:xlwings对Excel进行分类汇总
Python办公自动化:xlwings对Excel进行分类汇总
248 1
|
双11 文件存储 前端开发
限量版阿里云手办,原来这么简单就拿到了(附详细攻略)
阿里云今年双11出了个“带云小宝回家”的活动,一共限量3000个手办,还挺有科技感,出个攻略,方便大家去薅羊毛。按照下面的步骤,一步一步操作就行。
2534 0
限量版阿里云手办,原来这么简单就拿到了(附详细攻略)
|
存储 缓存 前端开发
网络互联设备(集线器、交换机、路由器)
网络互连设备用于将网络的各个部件连接到一起,从连接性质的不同可分为两种: 物理上的互连能力:指所支持的物理接口,能连接的物理介质类型 协议上的互连能力:指工作在不同协议类型的网络之间,实现不同协议数据包的转换。 通常对设备互连能力考虑得较多的都是协议上的互连能力
|
弹性计算 运维 安全
阿里云服务器镜像怎么选?Linux和Windows有啥区别?
阿里云服务器镜像怎么选?Linux和Windows有啥区别?阿里云服务器镜像Windows和Linux操作系统有什么区别?性能有差异吗?有,同配置下Linux性能要优于Windows,但这与阿里云无关,仅仅是linux和windows之间的区别。另外,阿里云提供的windows和linux操作系统均为正版授权,用户不需要额外支付许可费用,如何选择?看用户自己的应用程序情况
489 0
|
网络协议 调度
阿里云DNS解决精准调度问题
为了保证全球用户的访问质量,我们通常使用阿里云DNS配置2个CNAME接入国内、国外两家动态加速厂商。近期海外和国内经常出现访问超时的情况,发现经常会有新加坡的客户端ip被识别到是深圳,南部地区的客户端识别成了海外。导致用户访问慢,甚至是访问的结果不符合预期。
509 0
阿里云DNS解决精准调度问题
|
网络安全 开发工具 git
Git - 将一个项目同时从本地推送到 GitHub 和 Gitee
Git - 将一个项目同时从本地推送到 GitHub 和 Gitee
988 0
Git - 将一个项目同时从本地推送到 GitHub 和 Gitee
|
Python
from scipy import special, optimize, from ._nnls import nnls ImportError: DLL load failed: 找不到指定的模块。
from scipy import special, optimize, from ._nnls import nnls ImportError: DLL load failed: 找不到指定的模块。
706 0
from scipy import special, optimize, from ._nnls import nnls ImportError: DLL load failed: 找不到指定的模块。