MFC 菜单栏的使用

2023-11-19

MFC 菜单栏的使用


   

主要介绍两种比较简单和常用的创建方法。

一、在资源视图中添加菜单资源,通过鼠标点击添加菜单项

    菜单栏设计好,以后就是添加了。介绍两种方法:

    1、很简单,鼠标右击想显示菜单栏的对话框属性,可以看到有一个menu的属性,点击就会出现你已经设计好的菜单栏的资源ID,选中就好了。点击运行,就可以看到菜单栏。

    2、首先定位到你想显示菜单栏对话框的OnInitDialog()函数处,在其函数体里添加如下代码:

       CMenu menu;
       menu.LoadMenuW(IDR_MENU1);//加载资源菜单栏,IDR_MENU1为资源视图里菜单的ID
       this->SetMenu(&menu);     //这个函数将当前菜单设为指定的菜单。

        //它使窗口被重画以反映菜单的变化。参数必须是指针型的。

       menu.Detach();// 窗口销毁时,局部变量menu同时销毁 

二、通过输入代码显示菜单栏

     要熟悉几个CMenu()的函数 

BOOL AppendMenu(hMenu hMenu,UINT uFlags,UINT uIDNewltem,LPCTSTR lpNewltem);

hMenu:将被修改的菜单条、下拉式菜单、子菜单、或快捷菜单的句柄。

UFlags:控制新菜单项的外观和性能的标志。此参数可以是备注里所列值的组合。

UIDNewltem:指定新菜单项的标识符,或者当uFlags设置为MF_POPUP时,表示下拉式菜单或子菜单的句柄。

LpNewltem:指定新菜单项的内容。

 

BOOL InsertMenu(UINt uPosition,UINT uFlags,UINT uIDNewltem,LPCTSTR lpNewltem);

uPosition:指定新菜单项将被插入其前面的菜单项,其含义由参数uFlagS决定。

uFlags:指定控制参数uPosition的解释的标志、新菜单项的内容、外观和性能。此参数必须为下列值之一和列于备注里的一个值的组合。  

uIDNewltem:指定新菜单项的标识符,或者当参数uFlags设置为MF_POPUP时,指定下拉式菜单或子菜单的句柄。

LpNewltem:指定新菜单项的内容。其含义依赖于参数UFlags是否包含标志MF_BITMAP,MF_OWNERDRAW或MF_STRING。

 

熟悉几个nFlags标识符

MF_CHECKED:命令旁显示默认复选标志

MF_UNCHECKED:清除命令旁的复选标志

MF_DISABLED:禁止此菜单命令,但是不变灰显示

MF_ENABLED:允许此菜单命令,恢复到正常状态

MF_GRAYED:禁止此菜单命令,变灰显示

MF_MENUBARBREAK:对于静态菜单,放到新行;对于弹出菜单,放到新栏 中,栏间有分隔线

MF_MENUBREAK:对于静态菜单,放到新行;对于弹出菜单,放到新栏,栏间无分隔线

MF_OWNERDRAW:指定该命令是自画式菜单命令

MF_POPUP:指定该菜单命令有一个关联的弹出式菜单,即标准菜单,点击是显示其子菜单

MF_SEPARATOR:画一条水平分隔线,只用于弹出式菜单。

MF_STRING:指定此菜单命令是一个字符串 ,一般菜单可以设置响应函数。

定位到你想显示菜单栏的对话框的OnInitDialog()函数处,在其函数体里添加如下代码:

      CMenu menu;
      menu.CreateMenu();
      menu.AppendMenuA(MF_POPUP,(UINT)menu.m_hMenu,"文件");

      menu.AppendMenuA(MF_POPUP,(UINT)menu.m_hMenu,"编辑");
      menu.InsertMenuA(2,MF_POPUP,(UINT)menu.m_hMenu,"视图");

     //此时在菜单的第三项插入菜单

     //AppendMenuA()和InsertMenu()区别是,前一个函数总是默认的在菜单栏后面

     //插入菜单,而第二个函数可以在任意位置通过改变uPosition
      menu.GetSubMenu(0)->AppendMenuA(MF_STRING,111,"打开");

     //给菜单栏的第一个菜单添加子菜单,菜单栏默认计数从0开始的

      
      menu.GetSubMenu(0)->AppendMenuA(MF_SEPARATOR);
      //在“打开”后面添加了一个分隔符,

      menu.GetSubMenu(0)->AppendMenuA(MF_STRING,111,"关闭");
      this->SetMenu(&menu);
      menu.Detach();

最后设置一般菜单项的响应函数:

    在资源头文件添加#define IDM_MM2 111;就可以将 menu.GetSubMenu(0)->AppendMenuA(MF_STRING,111,"关闭");改写为 menu.GetSubMenu(0)->AppendMenuA(MF_STRING,IDM_MM2,"关闭");

    在当前对话框的头文件里添加一个点击菜单的响应函数例如ONMM2();

    关联MFC 中用的是ON_COMMAND(IDM_MM2,ONMM2),注意这句话后面不加“;”的。

    例如下面的添加:

   BEGIN_MESSAGE_MAP(CasdDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP   

  //当我们是手动添加时,就在下面不要添加到上面语句当中,如果添加到上面可能会出现一些莫名的错误。
    ON_BN_CLICKED(IDC_BUTTON2, &CasdDlg::OnBnClickedButton2)
    ON_COMMAND(IDM_MM1,OnMM1)
END_MESSAGE_MAP()

    然后编写函数ONMM2()的代码就可以了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC 菜单栏的使用 的相关文章

  • Unity --- Vector3类的API讲解

    1 Vector3中的静态变量是相对于世界坐标系的还是相对于自身坐标系呢 我们创建的Vector3类对象同理 答 这取决我们将创建的Vector3类对象 通过Vector3调用的静态变量传给了哪一个引用 如果是传给了positon的话 则该
  • 工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计

    鸿鹄工程项目管理系统 Spring Cloud Spring Boot Mybatis Vue ElementUI 前后端分离构建工程项目管理系统 1 项目背景 一 随着公司的快速发展 企业人员和经营规模不断壮大 为了提高工程管理效率 减轻
  • 14_Deep Computer Vision Using Convolutional Neural Networks_max pool_GridSpec_tf.nn, layers, contrib

    cp15 Classifying Images with Deep Convolutional NN Loss Cross Entropy ax text mnist CelebA Colab ckhttps blog csdn net L
  • socket连接超时问题

    一部分 把CSDN与中文yahoo翻了底朝天 也没找到如何设置socket的连接超时的满意方法 问此问题的兄弟已有一大堆 这里偶就讲一下win下如何设置socket的connect超时 设置connect的超时很简单 CSDN上也有人提到过
  • hive jdbc/metastore客户端方式连接开启kerberos的hive集群api

    pom依赖
  • Linux内核源代码情景分析-系统调用brk()

    首先看下进程地址空间示意图 我们简单的说 从低地址到高地址 代码区和数据区 空洞 堆栈区 在Linux内核源代码情景分析 内存管理之用户堆栈的扩展 我们申请了从堆栈区往下 数据区上面的页面 在Linux内核源代码情景分析 内存管理之用户页面
  • c语言getchar的作用,c=getchar()!='\n'到底什么用呢

    c getchar n 到底什么用呢 include
  • shell if多个条件判断_shell条件判断

    shell 开头 以sh后缀 开头 注释 表明采用何种解释器 bin bash lt 文件权限 ll total 4 rw r r 1 root root 88 Apr 24 22 15 demo sh 其中可以看到 demo sh没有可执
  • 微信小程序支付完整流程

    1 注册微信支付商户号 由上级或法人注册 注册链接 https pay weixin qq com index php apply applyment home guide normal none 此商户号 需要由主管及更上级领导进行注册
  • matlab计算基础

    目录 1 创建矩阵和向量 2 矩阵的基本运算 2 1 数乘 2 2 转秩 2 3 求逆 2 4 点积 2 5 拼接 3 复数 4 矩阵元素的引用 5 工作区中数据的保存和使用 1 创建矩阵和向量 向量包括行向量和列向量 向量就是个特殊的矩阵
  • 动态链接库-DLL探秘

    在Windows世界中 有无数块活动的大陆 它们都有一个共同的名字 动态链接库 在Windows世界中 有无数块活动的大陆 它们都有一个共同的名字 动态链接库 现在就让我们走进这些神奇的活动大陆 找出它们隐藏已久的秘密吧 初窥门径 Wind
  • Ceph入门到精通-Macvlan网络模式

    Docker中的Macvlan网络模式提供了一种将容器直接连接到宿主机网络的方式 使得容器可以拥有自己的MAC地址和与宿主机网络的直接连接 以下是使用Macvlan网络模式的一般步骤 创建Macvlan网络 docker network c
  • 通过uniapp打包生成的ipa安装包如何上架appstore

    通过uniapp打包生成的ipa安装包如何上架appstore 今天刚接手一个发布在android和ios平台的uniapp项目 因为我之前没有上线appstore平台的经验就专门了解了一下之前的上架流程 对于如何获取ios开发证书 发布证
  • 真正解决ScrollView嵌套RecyclerView的显示不全及滑动问题

    很多人都会遇到ScrollView嵌套RecyclerView嵌套的问题 各种嵌套模式 这种嵌套会出现以下几种问题 1 ScrollView和RecyclerView两者都会滑动 而且有时候 滑动会冲突 2 RecyclerView显示不全
  • 基于Bert的提示学习(prompt)文本分类

    1 介绍 1 1任务描述 1 2任务说明 2 建立模型 3 数据加载 4 训练 1 介绍 1 1任务描述 商品同款挖掘 同款商品是指商品的重要属性完全相同且客观可比的商品 商品同款识别的主要目的是从海量结构化和无结构化的商品图文数据库中匹配
  • 双模态情感分析

    1 任务介绍 2 建立模型 1 任务介绍 在做情感分析任务是 一般是通过纯文本进行判断的 或者通过语音来判断 现结合语音 文本双模态来进行情感分析 2 建立模型 from keras layers import from mult emti
  • 基于Qt的OpenGL编程(3.x以上GLSL可编程管线版)---(未知)阴影映射

    未完成 黑近白远 oglmanager h ifndef OGLMANAGER H define OGLMANAGER H include
  • 熄灯问题

    有一个由按钮组成的矩阵 其中每行有6个按钮 共5行 每个按钮的位置上有一盏灯 当按下一个按钮后 该按钮以及周围位置 上 下 左 右 的等都会转变状态 即 如果灯原来是点亮的 就会被熄灭 如果灯原来是熄灭的 则会被点亮 在矩阵角上的按钮改变3
  • 【3D人脸】Open3D学习笔记 一

    最近头疼于点云法向量的计算 实在找不到python的相关资料 想起来Open3D这个专门的工具 一搜还真有 踩了很多坑 记录一下 Open3D官方文档 http www open3d org docs release index html

随机推荐

  • uniapp(二) 之 uniapp 搭建与组件库的引用

    小扩展 rpx responsive pixel 可以根据屏幕宽度自适应 规定屏幕宽度为750rpx 如果iphon6上 屏幕宽度为375px 共有750个像素 则750rpx 375培训 750物理像素 1rpx 0 5px 1物理像素
  • 自定义类型 (结构体)

    文章目录 结构体的声明 1 结构的基础知识 2 结构的声明 3 特殊的声明 4 结构的自引用 5 结构体变量的定义和初始化 6 结构体内存对齐 7 修改默认对齐数 8 结构体传参 结构体的声明 1 结构的基础知识 结构是一些值的集合 这些值
  • Mac VSCode常用快捷键

    cmd option gt cmd option lt 返回上 下一个光标位置 cmd p 打开文件搜索框 control 返回 control shift 前进 补充
  • 工具及方法 - Process Explorer以及类似工具,用来获取系统运行的进程信息

    下载Process explorer Process Explorer Sysinternals Microsoft Learn Process explorer简介 有没有想过哪个程序打开了一个特定的文件或目录 现在你可以找到了 Proc
  • BDA初级分析——可视化图形

    一 时间趋势 时间趋势要如何呈现 Excel函数补充 YEAR 提取日期中的年份 MONTH 提取日期中的月份 DAY 提取日期中的天 HOUR 提取时间中的小时 TEXT 将数值转换为按指定数字格式表示的函数 写法 TEXT value
  • 提交表单--get与post方式

    我们经常在网页上输入信息 然后通过按钮提交 有两种提交方式 get和post get方式效率高但安全性低 post是封装后进行提交安全性高 get方式经常用于搜索 查询 post常用与用户注册登陆等 提交表单标签
  • 【Sibelius】制谱软件 (西贝柳斯)入门笔记

    首先声明 本人非音乐专业 连业余爱好者都算不上 因为小女是音乐生 为了填补代沟 所以就整点音乐相关的软件玩玩 又怕自己忘了 做个笔记 笔记主要是从B站学习的 链接 https www bilibili com video BV1Kb4114
  • 成功解决VS编译时提示“已经在 LIBCMT.lib(xxx) 中定义“

    报错信息 解决方法 在项目右击 gt 属性 gt 连接器 gt 命令行 gt 附加选项中 添加 force
  • 【小程序】使用wxParse解析html

    小程序在开发时 读取到服务器的内容是html格式的 因小程序不支持html格式的内容显示的 因此要对html格式的内容进行编译 可以通过wxParse来实现 wxParse下载地址 实现方法 将下载下来的wxParse文件夹复制到开发项目的
  • Unity(纯C语言单元测试框架!不是那个Unity3d)入门文档

    译者注 译者博客 http blog csdn net lin strong 转载请保留这条 此为Unity手册的翻译 仅供学习交流使用 请勿用于商业用途 翻译的资料是公开的 在docs UnityGettingStartedGuide m
  • 计算员工工资

    请编写一个程序 可以读取一名员工的员工编号 本月工作总时长 小时 以及时薪 并输出他的工资条 工资条中包括员工编号和员工月收入 输入格式 输入包含两个整数和一个浮点数 分别代表员工编号 工作时长以及时薪 每个数占一行 输出格式 输出共两行
  • Unreal Engine4蓝图编程学习(一)

    学习内容主要介绍了蓝图进行对象交互 升级玩家技能 升级AI敌人 跟踪游戏状态完成游戏体验等内容 内容来源于 Unreal Engine4蓝图可视化编程 书籍为2017年 与现在版本有一定区别 一 制作移动标靶 1 1 首先 我们想先创建一个
  • mysql database uri,未设置SQLALCHEMY_DATABASE_URI

    I tried to work with CURD operation using Flask and SQLAlchemy But getting Error while connecting to database Here is th
  • springboot+vue教室图书馆预约管理系统、

    下载地址 https download csdn net download ouyangxiaobai123 22176771 项目介绍 springboot vue教室图书馆预约管理系统 系统说明 聪慧物联网教室预定系统 后台系统 项目简
  • 多维数组变成一维数组

    这个问题来源于一个朋友曾经问过我的问题 当时是一个二维数组变成一维数组 后面我想整理一下 整理一个多维 并且是不定维的数组 一 二维数组变成一维数组 1 遍历数组 将元素一个个放入新数组 结果 如果元素不是数组 将会报错 下面是改良版 这样
  • 信号量和自旋锁

    信号量和自旋锁 为了避免并发 防止竞争 内核提供了一组同步方法来提供对共享数据的保护 我们的重点不是介绍这些方法的详细用法 而是强调为什么使用这些方法和它们之间的差别 Linux 使用的同步机制可以说从2 0到2 6以来不断发展完善 从最初
  • python编程实验,模拟聪明版的尼姆游戏设计原理

    实验原理与内容 本实验完成一个模拟聪明版的尼姆游戏功能 尼姆游戏是个著名的游戏 有很多变种玩法 两个玩家轮流从一堆物品中拿走一部分 在每一步中 玩家可以自由选择拿走多少物品 但是必须至少拿走一个并且最多只能拿走一半物品 然后轮到下一个玩家
  • Python SQLAlchemy ( ORM )、dictalchemy、Flask-SQLAlchemy、Flask-migrate、flask-script、flask-upload

    From Python中强大的通用ORM框架 SQLAlchemy https zhuanlan zhihu com p 444930067 Python ORM之SQLAlchemy全面指南 https zhuanlan zhihu co
  • ubuntu 18.04安装wireshark及网卡接口权限问题

    1 安装 sudo apt fast install wireshark 第一次安装过程中可能会提示Should non superusers be able to capture packets 选是即可 默认是否 2 待安装成功后 你会
  • MFC 菜单栏的使用

    MFC 菜单栏的使用 主要介绍两种比较简单和常用的创建方法 一 在资源视图中添加菜单资源 通过鼠标点击添加菜单项 菜单栏设计好 以后就是添加了 介绍两种方法 1 很简单 鼠标右击想显示菜单栏的对话框属性 可以看到有一个menu的属性 点击就