博客
关于我
(转)在CListView列表视图中添加右键菜单的方法
阅读量:786 次
发布时间:2023-01-23

本文共 1642 字,大约阅读时间需要 5 分钟。

了解与右键菜单相关的函数有哪些,以及它们应该如何添加到您的应用程序中。下面以练习为基础,详细介绍了如何在VC++环境中实现右键弹出式菜单的创建及调用。

首先,在资源编辑器中创建一个菜单资源。建议将菜单的ID设置为IDC_POPMENU。这个菜单资源需要有一层可弹出的菜单项,该项将包含我们要创建的弹出式菜单内容。每个菜单项的消息处理方式与传统菜单类似。

接下来,使用CMenu类对象来实现弹出式菜单。CMenu类提供了多种成员函数,其中LoadMenu函数用于从可执行文件中加载菜单资源。原型为:

BOOL LoadMenu(UINT nIDResource);

这里的nIDResource应设置为刚刚创建的IDC_POPMENU。

用CMenu类的另外一个重要函数GetSubMenu可以获取子菜单的指针。其原型为:

CMenu* GetSubMenu(int nPos) const;

其中,nPos指示的是菜单的层数。由于我们希望弹出一个有两层结构的可弹出菜单,因此将nPos设置为0来获取第一层子菜单的指针。

为了在指定位置显示弹出菜单并跟踪用户选择的项目,可以使用TrackPopupMenu函数。其原型为:

BOOL TrackPopupMenu(UINT nFlags,                    int x,                    int y,                    CWnd* pWnd,                    LPCRECT lpRect=NULL);

具体参数意义如下:

  • nFlags:组合屏幕坐标属性和鼠标坐标属性的布局参数。
    • 屏幕坐标属性:TPM_LEFTALIGN、TPM_CENTERALIGN、TPM_RIGHTALIGN。
    • 鼠标按键属性:TPM_LEFTBUTTON、TPM_RIGHTBUTTON。
  • x:菜单在水平方向上的显示位置(屏幕坐标)。
  • y:菜单在垂直方向上的显示位置(屏幕坐标)。
  • pWnd:菜单将显示的窗口的主指针。
  • lpRect:菜单在屏幕处显示的区域。如果为NULL,则默认将菜单放在正确的位置,并在着右键点击菜单外任何地方出现时自动关闭菜单。

在一般CView类派生类(如CMyView)中,响应WM_CONTEXTMENU消息,并使用TrackPopupMenu函数来实现弹出式菜单的具体实现。在消息响应函数中:

void CMyView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult){    CListCtrl& CList = GetListCtrl();    CMenu menu, *pSubMenu;    menu.LoadMenu(IDR_POPMENU);    pSubMenu = menu.GetSubMenu(0);    CPoint oPoint;    GetCursorPos(&oPoint);    int istat = CList.GetSelectionMark();    CString pString = CList.GetItemText(istat, 0);    // 是否需要显示当前项目信息或其他处理逻辑...    pString = "您选择的路径是:" + pString;    MessageBox(pString);    bReturn = pSubMenu->TrackPopupMenu(        TPM_LEFTALIGN,  // 水平对齐方式        oPoint.x,        oPoint.y,        this // 指定是当前视口    );    // 调用TrackPopupMenu并处理弹出式菜单的情况}

这样,用户在点击右键时,弹出的菜单将与当前光标位置对齐,并且可以根据菜单项的选择执行相应的操作。

转载地址:http://wteyk.baihongyu.com/

你可能感兴趣的文章
Docker入门之-镜像(二)
查看>>
嵌入式系统试题库(CSU)
查看>>
setup facatory9.0打包详细教程(含静默安装和卸载)
查看>>
java.security.InvalidKeyException: Illegal key size
查看>>
Linux kernel pwn --- CSAW2015 StringIPC
查看>>
IDEA 找不到 Persistence窗口解决办法
查看>>
Form窗体属性
查看>>
vue 错误收集
查看>>
00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
查看>>
00013.05 字符串比较
查看>>
Effective Java 读书笔记
查看>>
访问servlet时弹出文件下载框解决方法
查看>>
IDEA-@Slf4j和log标签&@Data(Lombok)无效
查看>>
SpringCloud-Eureka报错 Error creating bean with name解决
查看>>
Thymeleaf 生成下标,索引,使用Stat变量
查看>>
初始微服务---Springcloud发展【第一期】
查看>>
RAFT 拜占庭将军 共识算法
查看>>
UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
查看>>
cmd编译.java文件 : java:720: 错误: 编码GBK的不可映射字符 Why ? ? ? ?
查看>>
Android 架构组件 – 让天下没有难做的 App
查看>>