博客
关于我
(转)在CListView列表视图中添加右键菜单的方法
阅读量:787 次
发布时间: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/

你可能感兴趣的文章
搭建Vue项目步骤
查看>>
账号转账演示事务
查看>>
SpringBoot找不到@EnableRety注解
查看>>
在Vue中使用样式——使用内联样式
查看>>
Find Familiar Service Features in Lightning Experience
查看>>
Explore Optimization
查看>>
map[]和map.at()取值之间的区别
查看>>
【SQLI-Lab】靶场搭建
查看>>
【Bootstrap5】精细学习记录
查看>>
Struts2-从值栈获取list集合数据(三种方式)
查看>>
推荐几篇近期必看的视觉综述,含GAN、Transformer、人脸超分辨、遥感等
查看>>
VTK:可视化之RandomProbe
查看>>
block多队列分析 - 2. block多队列的初始化
查看>>
Java时间
查看>>
不编译只打包system或者vendor image命令
查看>>
【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
查看>>
flink启动(二)
查看>>
pair的用法
查看>>
Flex 布局的自适应子项内容过长导致其被撑大问题
查看>>
PL/SQL 动态Sql拼接where条件
查看>>