自定义右键菜单:

 #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)的更多相关文章

  1. win32进阶之路:程序托盘图标+右键弹出菜单

     开场白 本次介绍两个非常棒且实用的技巧:程序托盘图标和右键弹出菜单,效果如下图. 程序托盘图标用了迅雷的图标,右键点击时候会弹出三个选项的菜单. 程序托盘图标设置 我会用尽可能清晰明了的步骤介绍方式 ...

  2. vc++ 如何添加右键弹出菜单

    一.创建新工程 二.编辑菜单资源 1.添加菜单 按"Ctrl+R",双击"Menu"图标 2.于菜单编辑器内编辑菜单 四.添加代码(红色部分) void CCM ...

  3. DirectUI界面编程(六)实现右键弹出菜单

    本节向大家介绍一下右键弹出菜单是如何实现的.效果如下,在窗口中点击鼠标右键弹出菜单,点击菜单项能够响应菜单点击事件. 使用Duilib库实现的弹出菜单,实际上也是一个Windows窗口,因此我们需要创 ...

  4. Vue2的右键弹出菜单(vue-contextmenu)

    给大家推荐一个基于Vue2的右键弹出菜单插件,支持单一SPA页面以及可以在循环绑定中使用. 项目地址为:https://github.com/chIIC/vue-...demo1: 父组件绑定右键事件 ...

  5. 关于MFC主菜单和右键弹出菜单

    一.主菜单.弹出菜单和右键菜单的概念: 主菜单是窗口顶部的菜单,一个窗口或对话框只能有一个主菜单,但是主菜单可以被更改(SetMenu()更改): 创建方式:CMenu::CreateMenu(voi ...

  6. SWT中的Tree中 添加右键弹出菜单

    先看一下效果: 如图:在树上单击鼠标右键会弹出 弹出式菜单.做法其实很简单,先做一个树: final TreeViewer treeViewer = new TreeViewer(group, SWT ...

  7. win32 右键弹出菜单

    #define  CW_ABOUT  100 #define  CW_DOCUMENT 200 POINT t; GetCursorPos(&t); HMENU hMenu,hPopupMen ...

  8. js+css实现带缓冲效果右键弹出菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. QT 右键弹出菜单

    QWidget及其子类都可有右键菜单 1.设置标志 在widget初始化的时候 setContextMenuPolicy(Qt::CustomContextMenu); 设置为自定义菜单模式 2.在需 ...

随机推荐

  1. 源码 time sleep

    C:\Users\Administrator\.PyCharm2017.1\system\python_stubs\2083891348\time.py def sleep(seconds): # r ...

  2. three levels of abstraction

    DATABASESYSTEM CONCEPTS SIXTH EDITION Abraham Silberschatz Yale University Henry F. KorthLehigh Univ ...

  3. Common Gateway Interface Python CGI编程

    https://en.wikipedia.org/wiki/Gateway_(telecommunications) In telecommunications, the term gateway r ...

  4. android speakerphone/

    http://www.cnblogs.com/innost/archive/2011/01/22/1942149.html http://blog.sina.com.cn/s/blog_5418969 ...

  5. android call and audio

    mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system ConnCtl *:s android audio (http://blog.cs ...

  6. A Bug's Life-----poj2492(关系并查集)

    题目链接:http://poj.org/problem?id=2492 题意是问是否存在同性恋, 就是a喜欢b,b喜欢c,a又喜欢c,所以就有同性恋了: #include<stdio.h> ...

  7. WordPress 3.8 后台仪表盘将重新设计

    WordPress 3.8 的后台仪表盘界面将会重新设计 概况(RightNow) -> 改为网站内容(SiteContent) 快速发布(QuickPress) -> 改为快速草稿(Qu ...

  8. go-001-环境部署,IDEA插件

    一.下载安装 https://golang.org/dl/ 下载之后安装即可 官网地址:https://golang.org/ 1.1.mac上安装go 1.安装Homebrew 安装命令: ruby ...

  9. Tomcat修改端口和编码配置

    1.打开Tomcat中server.xml文件,找到原本的8080,修改成没被占用的端口: 2.在这个标签里增加 URIEncoding="utf-8",修改请求的编码.

  10. 使用 Mirantis Fuel9.0 部署 OpenStack M

    Mirantis Fuel 9 可以实现部署OpenStack M版本web化,管理员只需简单规划就能部署复杂的openstack 组件 安装Fuel9.0 下载官方IOS镜像 https://www ...