一、主菜单、弹出菜单和右键菜单的概念:

主菜单是窗口顶部的菜单,一个窗口或对话框只能有一个主菜单,但是主菜单可以被更改(SetMenu()更改);

创建方式:CMenu::CreateMenu(void);

弹出菜单在菜单项中是带有右向小三角的菜单,主菜单的每个菜单项都是一个弹出菜单(PopMenu),因此弹出菜单是凸型或左凸型;

创建方式:CMenu::CreatePopMenu(void);

右键菜单是点击右键弹出的菜单(响应OnContextMenu)。

右键菜单也是菜单和弹出菜单的结合体。

二、菜单的创建:

菜单创建有两种方式:一是通过加载菜单资源;二是动态创建菜单。(主张通过加载资源进行创建,因为这样简单)

通过动态创建主菜单:

#define ID_POPUPITEM_1 10001
#define ID_POPUPITEM_2 10002

CMenu m_menu;
CMenu popMenu;
m_menu.CreateMenu();
popMenu.CreatePopMenu();
m_menu.AppendMenu(MF_POPUP,(UINT)popMenu.m_hMenu,_T("主菜单项1");//将弹出菜单添加到主菜单上成为了第一个菜单项,这里将弹出菜单的句柄转化成弹出菜单的ID表示弹出菜单绑定到了主菜单上
popMenu.AppendMenu(MF_STRING,ID_POPUPITEM_1,_T("弹出菜单项1"));
popMenu.AppendMenu(MF_STRING,ID_POPUPITEM_2,_T("弹出菜单项2"));//为弹出菜单添加子项
SetMenu(&m_menu);//将主菜单替换成新创建的菜单
m_menu.detach();//由于m_menu是局部变量,如果该对象不与与其绑定的菜单资源解绑,则该对象销毁时也会销毁菜单资源,因此需要解绑
popMenu.detach();//同理解绑

通过资源模版创建主菜单:

CMenu m_menu;
m_menu.LoadMenu(ID_MAINMENU);
SetMenu(&m_menu);
m_menu.detach();

弹出菜单创建方式与主菜单类似,只是后面需要加上位置:

void OnContextMenu(CWnd* pWnd,Point point)
{
    CMenu m_menu;
    m_menu.LoadMenu(ID_MAINMENU);
    m_menu.detach();
    m_menu.GetSubItem(0)->TrackPopMenu(TPM_LEFTALIGN, point.x, point.y, this);
}

关于MFC主菜单和右键弹出菜单的更多相关文章

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

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

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

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

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

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

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

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

  5. web标准(复习)--4 纵向导航菜单及二级弹出菜单

    今天我们开始学习纵向导航菜单及二级弹出菜单,包含以下内容和知识点: 纵向列表 标签的默认样式 css派生选择器 css选择器的分组 纵向二级列表 相对定位和绝对定位 一.纵向列表纵向列表或称为纵向导航 ...

  6. Web标准:四、纵向导航菜单及二级弹出菜单

    Web标准:四.纵向导航菜单及二级弹出菜单 知识点: 1.纵向列表 2.标签的默认样式 3.css派生选择器 4.css选择器的分组 5.纵向二级列表 6.相对定位和绝对定位   1)纵向列表 可以看 ...

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

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

  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. JSP指令用来设置整个JSP页面相关的属性

    JSP 指令 JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言. 语法格式如下: <%@ directive attribute="value" %&g ...

  2. Smart pointer 智能指针小总结

    Smart pointer line 58之后smart pointer里的计数已经是0,所以会真正释放它引用的对象,调用被引用对象的析构函数.如果继续用指针访问,会出现如下图的内存访问异常.所以说如 ...

  3. maven安装jar包到本地仓库

    mvn install:install-file -Dfile=D:/asm-1.5.3.jar -DgroupId=asm  -DartifactId=asm -Dversion=1.5.3 -Dp ...

  4. [c++]对象指针,引用的操作

    1.time类保存在"htime.h"中.要求: ⑴ 数据成员包括时(hour).分(minute).秒(second),为私有成员: ⑵ 能给数据成员提供值的成员函数(默认值为0 ...

  5. SourceTree超前一个版本,落后N个版本

    SourceTree超前一个版本,落后N个版本 在使用SourceTree的时候经常会遇见超前一个版本,落后N个版本的情况,遇见这种情况应该怎么办呢?   首先打开终端,最好是从SourceTree里 ...

  6. 三种光照模型的shader实现

    1.Lambert模型,公式为I=Kd*Il(N*L): Shader "Custom/Lambert_A" { Properties { _Diffuse(,,,) } SubS ...

  7. JS获取图片的缩略图

    js获取上传文件的缩略图 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  8. 【BZOJ4070】[Apio2015]雅加达的摩天楼 set+最短路

    [BZOJ4070][Apio2015]雅加达的摩天楼 Description 印尼首都雅加达市有 N 座摩天楼,它们排列成一条直线,我们从左到右依次将它们编号为 0 到 N−1.除了这 N 座摩天楼 ...

  9. full stack on the road

    Full Stack, I'm coming. 有人说全栈只是个理想情况,但我不这么认为,因为好多思想是想通的, 比如 OO.函数式编程.设计模式... 也有人说搞全栈的人样样普通,可是为嘛我在学习j ...

  10. client = new DatagramSocket(LocalPort) 是说端口已经被占用的意思

    ok 现在遇到一个问题,client = new DatagramSocket(LocalPort) 是说端口已经被占用的意思 ref:!!https://community.oracle.com/t ...