Win32建立右键弹出菜单(PopMenu)
自定义右键菜单:
#ifndef _CONTEXTMENU_H_
#define _CONTEXTMENU_H_
#include <windows.h> //动态菜单
#define ITEM_MENU_REPLY 40001
#define ITEM_MENU_ALLREPLAY 40002
#define ITEM_MENU_RELAY 40003
#define ITEM_MENU_DELETE 40004
#define ITEM_MENU_FINALDELETE 40005
#define ITEM_MEUN_MARK 40006
#define ITEM_SUBMENU_UNSEEN 40007
#define ITEM_SUBMENU_SEEN 40008 class CContextPopMenu
{
public:
CContextPopMenu();
~CContextPopMenu(); void PopMenu(HWND hwnd,int nX,int nY );
void PopMenu(HWND hwnd,const POINT& pt); void EnableMenu(int nItem,bool nEnable);
private:
HMENU m_pPopMenu;
};
#endif
#include "ContextMenu.h" CContextPopMenu::CContextPopMenu()
{
m_pPopMenu = CreatePopupMenu();
if (m_pPopMenu)
{
HMENU Submenu = ::CreatePopupMenu();
::InsertMenu(m_pPopMenu,(-),MF_BYPOSITION,ITEM_MENU_REPLY,TEXT("回复"));
::InsertMenu(m_pPopMenu,(-),MF_BYPOSITION,ITEM_MENU_ALLREPLAY,TEXT("全部回复"));
::InsertMenu(m_pPopMenu,(-),MF_BYPOSITION,ITEM_MENU_RELAY,TEXT("转发"));
::InsertMenu(m_pPopMenu,(-),MF_BYPOSITION,ITEM_MENU_DELETE,TEXT("删除"));
::InsertMenu(m_pPopMenu,(-),MF_BYPOSITION,ITEM_MENU_FINALDELETE,TEXT("彻底删除"));
::InsertMenu(m_pPopMenu,(-),MF_BYPOSITION|MF_POPUP,(unsigned int)Submenu,TEXT("标记"));
::InsertMenu(Submenu,(-),MF_BYPOSITION|MF_POPUP,ITEM_SUBMENU_UNSEEN,TEXT("未读邮件"));
::InsertMenu(Submenu,(-),MF_BYPOSITION|MF_POPUP,ITEM_SUBMENU_SEEN,TEXT("已读邮件"));
}
} CContextPopMenu::~CContextPopMenu()
{
if (m_pPopMenu)
{
DestroyMenu(m_pPopMenu);
m_pPopMenu = NULL;
}
} void CContextPopMenu::PopMenu(HWND hwnd,int nX,int nY )
{
if (m_pPopMenu && hwnd)
{
TrackPopupMenu(m_pPopMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,nX,nY,,hwnd,NULL)
}
} void CContextPopMenu::PopMenu(HWND hwnd,const POINT& pt)
{
PopMenu(hwnd,pt.x,pt.y);
}
然后在WndProc回调函数,响应WM_RBUTTONUP函数时创建
case WM_RBUTTONUP:
POINT pt;
::GetCursorPos(&pt);
CContextPopMenu* pPopMenu = new CContextPopMenu;
pPopMenu->PopMenu(hwnd,pt);
break;
对每个菜单项的响应在WM_COMMAND消息里处理
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ITEM_MENU_REPLY:
MessageBox(NULL,TEXT("响应回复菜单项"),TEXT("提示"),MB_OK);
break;;
case ITEM_SUBMENU_UNSEEN:
MessageBox(NULL,TEXT("响应标记子菜单项"),TEXT("提示"),MB_OK);
break;
}
借鉴他人代码:http://blog.csdn.net/bizhu12/article/details/6664210
Win32建立右键弹出菜单(PopMenu)的更多相关文章
- win32进阶之路:程序托盘图标+右键弹出菜单
开场白 本次介绍两个非常棒且实用的技巧:程序托盘图标和右键弹出菜单,效果如下图. 程序托盘图标用了迅雷的图标,右键点击时候会弹出三个选项的菜单. 程序托盘图标设置 我会用尽可能清晰明了的步骤介绍方式 ...
- vc++ 如何添加右键弹出菜单
一.创建新工程 二.编辑菜单资源 1.添加菜单 按"Ctrl+R",双击"Menu"图标 2.于菜单编辑器内编辑菜单 四.添加代码(红色部分) void CCM ...
- DirectUI界面编程(六)实现右键弹出菜单
本节向大家介绍一下右键弹出菜单是如何实现的.效果如下,在窗口中点击鼠标右键弹出菜单,点击菜单项能够响应菜单点击事件. 使用Duilib库实现的弹出菜单,实际上也是一个Windows窗口,因此我们需要创 ...
- Vue2的右键弹出菜单(vue-contextmenu)
给大家推荐一个基于Vue2的右键弹出菜单插件,支持单一SPA页面以及可以在循环绑定中使用. 项目地址为:https://github.com/chIIC/vue-...demo1: 父组件绑定右键事件 ...
- 关于MFC主菜单和右键弹出菜单
一.主菜单.弹出菜单和右键菜单的概念: 主菜单是窗口顶部的菜单,一个窗口或对话框只能有一个主菜单,但是主菜单可以被更改(SetMenu()更改): 创建方式:CMenu::CreateMenu(voi ...
- SWT中的Tree中 添加右键弹出菜单
先看一下效果: 如图:在树上单击鼠标右键会弹出 弹出式菜单.做法其实很简单,先做一个树: final TreeViewer treeViewer = new TreeViewer(group, SWT ...
- win32 右键弹出菜单
#define CW_ABOUT 100 #define CW_DOCUMENT 200 POINT t; GetCursorPos(&t); HMENU hMenu,hPopupMen ...
- js+css实现带缓冲效果右键弹出菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- QT 右键弹出菜单
QWidget及其子类都可有右键菜单 1.设置标志 在widget初始化的时候 setContextMenuPolicy(Qt::CustomContextMenu); 设置为自定义菜单模式 2.在需 ...
随机推荐
- FW 构建OpenStack的高可用性(HA,High Availability)
原文地址:http://blog.csdn.net/hilyoo/article/details/7704280 1.CAP理论 1) CAP 理论给出了3个基本要素: 一致性 ( Consisten ...
- iOS-CoreLocation简单介绍(转载)
一.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如 (1)导航:去任意陌生的地方 (2)周边:找餐馆.找酒店.找银行.找电影院 2.在上述应用中,都用到了地图和定位功能,在iOS ...
- 2018/03/25 每日一个Linux命令 之 df
Linux df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计. 就像在windows下打开我的电脑一样会统计各个磁盘一样的情况 主要用于查看磁盘空间占用情况 -- [@hong:~] ...
- nginx 哈希表数据结构
1.哈希表ngx_hash_t的优势和特点 哈希表是一种典型的以空间换取时间的数据结构,在没有冲突的情况下,对任意元素的插入.索引.删除的时间复杂度都是O(1).这样优秀的时间复杂度是通过将元素的ke ...
- beginAppearanceTransition
- (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated __OSX_AVAILABLE_STARTING ...
- HTML状态消息
HTTP 状态消息 当浏览器从 web 服务器请求服务时,可能会发生错误. 以下列举了有可能会返回的一系列 HTTP 状态消息: 1xx: 信息 消息: 描述: 100 Continue 服务器仅接收 ...
- (转)Kangle配置文件
kangle配置文件 (重定向自Kangle配置文件) 目录 [隐藏] 1配置文件介绍 2重新加载配置文件 3config 3.1request和response(配置访问控制) 3.2listen( ...
- R中apply等函数用法[转载]
转自:https://www.cnblogs.com/nanhao/p/6674063.html 1.apply函数——对矩阵 功能是:Retruns a vector or array or lis ...
- 简单的应用可以用storyBoard
可是问题,你不知道你的项目有多复杂,storyBoard跳转控制有代码这么灵活吗? 1. 假是是根据推送来推出页面呢? 2. 假如我要根据不同情况不停地推出不同的页面呢?storyBoard怎么确定关 ...
- html06
1.全局函数alert();console.log();parseInt();parseString();isNaN();eval(); 用于计算表达式字符串 用于执行字符串中的js代码 eval(& ...