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.在需 ...
随机推荐
- 源码 time sleep
C:\Users\Administrator\.PyCharm2017.1\system\python_stubs\2083891348\time.py def sleep(seconds): # r ...
- three levels of abstraction
DATABASESYSTEM CONCEPTS SIXTH EDITION Abraham Silberschatz Yale University Henry F. KorthLehigh Univ ...
- Common Gateway Interface Python CGI编程
https://en.wikipedia.org/wiki/Gateway_(telecommunications) In telecommunications, the term gateway r ...
- android speakerphone/
http://www.cnblogs.com/innost/archive/2011/01/22/1942149.html http://blog.sina.com.cn/s/blog_5418969 ...
- android call and audio
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system ConnCtl *:s android audio (http://blog.cs ...
- A Bug's Life-----poj2492(关系并查集)
题目链接:http://poj.org/problem?id=2492 题意是问是否存在同性恋, 就是a喜欢b,b喜欢c,a又喜欢c,所以就有同性恋了: #include<stdio.h> ...
- WordPress 3.8 后台仪表盘将重新设计
WordPress 3.8 的后台仪表盘界面将会重新设计 概况(RightNow) -> 改为网站内容(SiteContent) 快速发布(QuickPress) -> 改为快速草稿(Qu ...
- go-001-环境部署,IDEA插件
一.下载安装 https://golang.org/dl/ 下载之后安装即可 官网地址:https://golang.org/ 1.1.mac上安装go 1.安装Homebrew 安装命令: ruby ...
- Tomcat修改端口和编码配置
1.打开Tomcat中server.xml文件,找到原本的8080,修改成没被占用的端口: 2.在这个标签里增加 URIEncoding="utf-8",修改请求的编码.
- 使用 Mirantis Fuel9.0 部署 OpenStack M
Mirantis Fuel 9 可以实现部署OpenStack M版本web化,管理员只需简单规划就能部署复杂的openstack 组件 安装Fuel9.0 下载官方IOS镜像 https://www ...