在(CListView)列表视图中添加右键菜单

2024-01-07 12:18

本文主要是介绍在(CListView)列表视图中添加右键菜单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在(CListView)列表视图中添加右键菜单
使用弹出式菜单(PopMenu)

  弹出式菜单(PopMenu)大家都熟悉,在WIN98的桌面上单击鼠标右键弹出的菜单就是弹出式菜单。通常情况下,弹出式菜单在鼠标右键单击 时弹出,当然,也可以根据需要随时弹出。 在VC++5的MFC中,管理菜单的类叫CMenu。下面我向大家介绍建立一个弹出式菜单的基本方法。

  一、在资源编辑器中建立一个菜单资源
  新建一个菜单资源,比如把菜单的ID号为IDC_POPMENU。此菜单有一项两层,即有一个可弹出的菜单项,而此菜单项的弹出内容即为将要建立的弹出式菜单的内容。至于每一个菜单项的消息映射,与一般的菜单相同。

  二、使用CMenu类对象

  CMenu类的成员函数较多,但建立弹出式菜单只需用到其中几个成员函数。
  1、LoadMenu函数

  功能:从应用程序的可执行文件中加载菜单资源
  原型:BOOL LoadMenu( UINT nIDResource );
  其中nIDResource是菜单资源的ID号,这里用的是刚建立的IDC_POPMENU。
  2、GetSubMenu函数

  功能:此函数用于得到子菜单的指针。
  原型:CMenu* GetSubMenu( int nPos ) const;
  nPos为层数,0为第一层子菜单……以此类推。
  由于我们需要的是“可弹出项”的第一层子菜单,因此用GetSubMenu(0)来得到第一层子菜单的类指针。

  3、TrackPopupMenu函数

  功能:在指定位置显示弹出菜单,并跟踪所选择的项
  原型:BOOL TrackPopupMenu( UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect = NULL );
  其中:
  nFlags为屏幕坐标属性和鼠标坐标属性
  屏幕坐标属性:
  TPM_CENTERALIGN 横向将菜单以x居中
  TPM_LEFTALIGN 横向将菜单以x左对齐

  TPM_RIGHTALIGN 横向将菜单以x右对齐
  鼠标按键属性(只在响应WM_CONTEXTMENU消息时有效):
  TPM_LEFTBUTTON 连续按? 右键不会连续弹出菜单,鼠标右键不可用于选定菜单项
  TPM_RIGHTBUTTON 连续按鼠标右键会连续弹出菜单,鼠标右键可用于选定菜单项
  x,y均为屏幕坐标

  lpRect 菜单所占的区域。如果为NULL,当用户在菜单以外的区域按鼠标键时,菜单会消失
  三、具体实现方法

  用ClassWizard中的“Add Windows Message Handler”功能添加对NM_RCLICKT消息的响应函数,函数中代码如下,注释很详细,在vc6+win2000环境下调试成功,大家感兴趣的话自己试试吧:

void CMyView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)

  {

  CListCtrl &CList = GetListCtrl();//获取当前列表控件的指针

  CMenu       menu ,* pSubMenu;//定义下面要用到的cmenu对象

  menu.LoadMenu(IDR_POPMENU);//装载自定义的右键菜单

  pSubMenu = menu.GetSubMenu(0);//获取第一个弹出菜单,所以第一个菜单必须有子菜单

  CPoint oPoint;//定义一个用于确定光标位置的位置

  GetCursorPos( &oPoint);//获取当前光标的位置,以便使得菜单可以跟随光标

  int istat=CList.GetSelectionMark();//用istat存放当前选定的是第几项

  CString pString =CList.GetItemText(istat,0);//获取当前项中的数据,0代表是第0列

  pString="您选择的路径是:"+pString ;//显示当前选择项

  MessageBox(pString);//显示当前选中的路径

  pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this); //在指定位置显示弹出菜单

  }

 

这篇关于在(CListView)列表视图中添加右键菜单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/579887

相关文章

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

数据视图(AngularJS)

<!DOCTYPE html><html ng-app="home.controller"><head><meta charset="utf-8"><title>数据视图</title><link href="page/common/css/bootstrap.min.css" rel="stylesheet"><script src="page/common/js/angular.js"></

Spring+MyBatis+jeasyui 功能树列表

java代码@EnablePaging@RequestMapping(value = "/queryFunctionList.html")@ResponseBodypublic Map<String, Object> queryFunctionList() {String parentId = "";List<FunctionDisplay> tables = query(parent

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

12C 新特性,MOVE DATAFILE 在线移动 包括system, 附带改名 NID ,cdb_data_files视图坏了

ALTER DATABASE MOVE DATAFILE  可以改名 可以move file,全部一个命令。 resue 可以重用,keep好像不生效!!! system照移动不误-------- SQL> select file_name, status, online_status from dba_data_files where tablespace_name='SYSTEM'

Exchange 服务器地址列表的配置方法与注意事项

Exchange Server 是微软推出的一款企业级邮件服务器软件,广泛应用于企业内部邮件系统的搭建与管理。配置 Exchange 服务器地址列表是其中一个关键环节。本文将详细介绍 Exchange 服务器地址列表的配置方法与注意事项,帮助系统管理员顺利完成这一任务。 内容目录 1. 引言 2. 准备工作 3. 配置地址列表 3.1 创建地址列表 3.2 使用 Exchange

架构全景视图

文章目录 一、战略规划二、业务架构Business Architecture2.1业务架构定义2.2 业务架构组成2.3 TOGAF2.3.1 Archimate建模(重要) 三、数据架构Data Architecture3.1 数据架构定义3.2 数据架构组成 四、应用架构Application Architecture4.1 应用架构定义4.2 应用架构组成 五、技术架构Technol

2409wtl,切换视图

原文 介绍 我从一个基于SDI(单文档接口)WTL向导的应用开始,添加了一些从控件继承的窗口和一些对话框窗口(表单视图),然后才发现我必须,使SDI框架动态加载和卸载子窗口. 本文演示了两个可用来完成的技术:在SDI应用中的视图间动态切换.这是我使用的两个. 技术 1技术:第一个方法涉及按需析构和重建视图实例.这更简单,且在不介意析构和重建窗口对象时效果很好. 2:按需创建视图,然后用