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

[cpp] view plaincopy

 

  1. <span style="font-size:24px;color:#ff0000;">为树形控件添加弹出式菜单,并跟踪所选择的项</span>  

[cpp] view plaincopy

 

  1. 动态弹出式菜单  

[cpp] view plaincopy

 

  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 plaincopy

 

  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 plaincopy

 

  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 plaincopy

 

  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 plaincopy

 

  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("猫菜单被按下");
}

时间: 2024-10-01 09:26:17

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

JavaScript面向对象技术实现树形控件

javascript|对象|控件 树形控件是一种人们熟悉的用户界面控件,广泛地用来显示层次型数据. 树形控件具有独特的扩展和折叠分支的能力,能够以较小的空间显示出大量的信息,一目了然地传达出数据之间的层次关系.凡是熟悉图形用户界面的用户,都能够自如地运用树形控件. 图一:用JavaScript实现的树形控件 HTML本身不支持树形控件,但我们可以通过一些JavaScript脚本代码实现.为了提高控件的可重用性,我们要充分运用JavaScript对面向对象编程技术的支持.本文的树形控件适用于IE

教你如何使用JSP面向对象web编程技术实现树形控件

js|web|编程|对象|控件 树形控件是一种人们熟悉的用户界面控件,广泛地用来显示层次型数据. 树形控件具有独特的扩展和折叠分支的能力,能够以较小的空间显示出大量的信息,一目了然地传达出数据之间的层次关系.凡是熟悉图形用户界面的用户,都能够自如地运用树形控件. 图一:用java script实现的树形控件 HTML本身不支持树形控件,但我们可以通过一些java script脚本代码实现.为了提高控件的可重用性,我们要充分运用java script对面向对象编程技术的支持.本文的树形控件适用于I

MFC 树形控件CTreeCtrl显示文件路径及文件

在上篇文章中简单讲述了"MFC单文档分割窗口显示图片",但是我想实现的是左边显示图片的路径,右边显示图片的情况,所以这里需要讲述如何使用控件List Control和Tree Control.    CListCtrl(列表控件):可以用大图标.小图标.列表.报表四种不同方式显示一组信息.    CTreeCtrl(树形控件):用树结构显示一组信息,并能反映这些信息的层次关系.首先声明:该文章主要是数字图形处理知识并结合liujiannan_1987的上传资源讲述,在此感谢该作者:ht

jQuery树形控件zTree使用小结_jquery

0 zTree简介  树形控件的使用是应用开发过程中必不可少的.zTree 是一个依靠 jQuery 实现的多功能 "树插件".优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点.  0.0 zTree的特点 •最新版的zTree将核心代码按照功能进行了分割,不需要的代码可以不用加载,如普通使用只需要加载核心的jquery.ztree.core-3.5.js,需要使用勾选功能加载jquery.ztree.excheck-3.5.min.js,需要使用编辑功能加载jquery

Bootstrap树形控件使用方法详解_javascript技巧

一.JQuery树形控件Jquery树形控件是一款基于JQuery+bootstrap.完全通过js和样式手写出来的非常轻量级的控件,网上很多地方都能看到它的影子.它功能简单.用户体验不错.对于一些简单的层级关系展示比较实用,但对于节点的增删改实现起来就不容易了,如果非要做,可能需要自己去封装. 1.一睹初容 全部收起 展开一级 全部展开 2.代码示例 此控件实现起来也非常简单,只需要引用jQuery和bootstrap组件即可. <link href="~/Content/Tree1/c

在Android上实现树形控件

  在PC上我们已经习惯了树形控件,因为其可以清晰的展现各个节点之间的层次结果,但是在Android平台上,系统并没有提供这样一个控件,而是只有ListView.不过通过改写改写与ListView绑定的Adapter可以实现这样一个效果.   一个ListView需要和一个Adapter绑定,用于管理数据.在这里以BaseAdapter为例,继承Adapter需要重写四个函数,其中较为重要的是两个:    1 public int getCount()://该函数返回ListView 的List

Android树形控件绘制方法

前言 作为一个开发者,日常会接触到很多优秀的软件,其实,或多或少会有这样的想法,我能不能开发一个自己软件,甚至办公软件都希望是Markdown的文本,为何用office?我常常想自己做一个IDE什么的.但是,很多只是想了一下就过了,一直没有实现. 我接触思维导图软件已经很久的了,开始是使用微软的思维导图软件,接着XMind,后来使用了MindMaple Lite.感觉很好用的.也想过如何去实现一个思维导图的软件,加之我特别注意软件的快捷键,我选取软件常常是,看快捷如何,快捷键差的就不要了.基于自

Android树形控件的实现方法

在PC上我们已经习惯了树形控件,因为其可以清晰的展现各个节点之间的层次结果,但是在Android平台上,系统并没有提供这样一个控件,而是只有ListView.不过通过改写与ListView绑定的Adapter可以实现这样一个效果. 一个ListView需要和一个Adapter绑定,用于管理数据.在这里以BaseAdapter为例,继承Adapter需要重写四个函数,其中较为重要的是两个:    1 public int getCount()://该函数返回ListView 的ListItem的条

为列表控件添加水平滚动条

Win32的标准控件之中,列表控件(ListBox)并没有和列表视图(ListView)一样提供水平滚动条,所以如果列表项的长度超过列表的宽度的话,那么超出的部分将无法显示.在本文中我将以一个简单的例子来说明如何使用SDK来解决这一问题,在这个例子中,我将为一个列表控件添加100行如下格式的文本: This is a very very very very very long sentence - line 1 This is a very very very very very long se