菜单基础知识

2017-01-08本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6262353.html 

  菜单栏、工具栏和状态栏是组成Windows程序图形界面的三个主要元素。

一些基本概念总结:

弹出式菜单:MFC中属性设置为Pop-up类型的菜单。

如下图示File菜单的Popup属性设置为True,说明它是一个弹出式菜单。Visual C++默认顶层菜单为弹出式菜单,这种菜单不能响应命令,但顶层菜单并非只能是弹出式菜单,其取决于Popup属性设置。

  资源:在MFC中,资源就是一种可供Windows应用程序动态加载利用,而且可单独编译的数据。Visual C++ 支持的资源有加速键、位图、光标、对话框、HTML、图标、菜单、串表、工具条和版本信息等。

资源的命名规则:与MFC保持一致,一般采用大写字母标识资源ID,更近一步地,为了明确资源类型,在“ID”字符串后加一个标识资源类型的字母,常用的有:菜单(MENU)资源ID号以“IDM_”开始,光标(CURSOR)资源ID号以“IDC_”开始,图标(ICON)资源ID号以“IDI_”开始。如下表是一些常用资源标识符前缀:


标识符前缀


说    


标识符前缀


说    


IDR_


主菜单、工具栏、加速键表和应用程序图标


IDS_


字符串


IDD_


对话框


IDP_


消息框提示字符串


IDC_


控件和光标


ID_


菜单命令

菜单命令响应函数的添加方法:

    在菜单栏添加Test菜单,设置Popup属性为False,将其ID设置为IDM_TEST。

  打开Project 菜单下的Class Wizard,弹出MFC Class Wizard对话框,

  为了在框架类中响应此菜单命令,Class name应选择CMainFrame,Object IDs列表中选择IDM_TEST,(可以通过Search Commands快速找到此ID),在Messages中选择COMMAMD,然后单击Add Handler添加消息处理,如图弹出Add Member Function对话框所示,此处显示了详细信息。

  单击OK,回到MFC Class Wizard对话框会发现Member functions中多了一个刚添加的函数。

  单击Edit Code可以跳转到OnTest函数的定义处。添加如下代码:

MessageBox(TEXT("MainFrame Clicked"));

  Build并运行程序,单击Test菜单会弹出一个显示了MainFrame Clicked消息的消息框。

菜单命令响应函数添加之后,程序中多了哪些与菜单命令消息响应函数相关的信息?

我们为View类添加Test菜单项的命令响应函数。添加之后,在程序中添加了三处与此相关的信息:

第一处:在视类的头文件中,添加了命令消息响应函数原型。

afx_msg void OnTest();

第二处和第三处:在视类的源文件中,添加了宏和命令消息响应函数实现代码。

//宏

    BEGIN_MESSAGE_MAP(CMenuView, CView)

       ...

                ON_COMMAND(IDM_TEST, &CMenuView::OnTest)

END_MESSAGE_MAP()

      //命令消息响应函数实现代码

void CMenuView::OnTest()

{

       // TODO: Add your command handler code here

}

菜单命令的路由:

         响应菜单项命令的顺序依次是:视类、文档类、框架类,最后是应用程序类。

         菜单命令消息路由的具体过程:

         当点击某个菜单项时,最先接收到这个菜单命令消息的是框架类。框架类将把接收到的这个消息交给它的子窗口,即视类,由视类首先进行处理。视类首先根据命令消息映射机制查找自身是否对此消息进行了相应,如果响应了,就调用相应函数对这个消息进行处理,消息路由过程结束;如果没有对此命令消息做出响应,就交由文档类,文档类同样查找自身是否对这个菜单命令进行了响应,如果响应了,就有文档类的命令消息响应函数进行处理,路由过程结束。如果文档类也未做出响应,就把这个命令交还给视类,后者又把该消息交还给框架类,框架类查看自己是否对这个命令消息进行了相应,如果它也没有做出响应,就把这个菜单命令消息交给应用程序类,有后者来进行处理。

Windows消息的分类:

         在Windows中,消息分为三类:

         标准消息:除WM_COMMAND之外,所有以WM_开头的消息。

         命令消息:来自菜单、加速键或工具栏按钮的消息,这类消息都以WM_COMMAND形式呈现。

    ③通告消息:由控件产生的消息,例如按钮的单击、列表框的选择等都会产生此类消息。目的是为了向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。

  如果有疑问,可以联系[email protected],更多内容请参考:http://www.cnblogs.com/mxbs/,技术交流请加QQ群:586571286。

时间: 2024-11-03 21:44:57

菜单基础知识的相关文章

【深度分解】听趣拍云产品经理剖析视频基础知识(2)

"随着技术的不断进步,视频技术的制作加工门槛逐渐降低,信息资源的不断增长,同时由于视频信息内容更加丰富完整的先天优势,在近年来已经逐渐成为主流.在基础知识(1)里面已经讲了模拟时代和数字化时代的视频技术.接下来将对视频编码与压缩.画面压缩.运动压缩.互联网视频应用的到来做一个详细的介绍." 视频编码与压缩 视频编码与压缩,是数字化视频非常重要的技术,以至于它直接影响到视频在各个领域的应用.如果没有视频编码技术的不断提高,我们今天也不可能在方方面面享受到视频的便利性. 首先,视频编码是一

Android应用基础知识

Android 应用采用 Java 编程语言编写.Android SDK 工具将您的代码-连同任何数据和资源文件-编译到一APK: Android 软件包,即带有 .apk 后缀的存档文件中.一个 APK 文件包含 Android 应用的所有内容,它是基于 Android 系统的设备用来安装应用的文件. 安装到设备后,每个 Android 应用都运行在自己的安全沙箱内: 1.Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一位不同的用户: 2.默认情况下,系统会为每个应

微信公众平台开发基础知识38问

最近接触微信公众号后台的开发,看了一些资料基本可以满足简单的需求开发.笔者将这些问题及解答整理出来,以帮助更多初学者少走弯路. 1.订阅号与服务号的主要区别是什么? 订阅号每天能群发一条消息,没有自定义菜单及高级接口权限(目前 个人.企业订阅号关联腾讯微博认证之后才有自定义菜单):服务号有自定义菜单微信认证之后有高级接口权限,但每月只能群发一条消息. 2.到底该申请订阅号还是服务号? 申请哪种类型的公众账号,主要取决于账号的用途.服务号主要面向企业和组织,旨在为用户提供服务:订阅号主要面向媒体和

Java__线程---基础知识全面实战---坦克大战系列为例

今天想将自己去年自己编写的坦克大战的代码与大家分享一下,主要面向学习过java但对java运用并不是很熟悉的同学,该编程代码基本上涉及了java基础知识的各个方面,大家可以通过练习该程序对自己的java进行一下实战. 每个程序版本代码中,都附有相关注释,看完注释大家就可以对本程序设计有个很明显的思路.真的很有趣,想对java重新温习的同学完全不必再对厚厚的java基础书籍进行阅读了,在跟着本次代码练习并分析后,大家一定会对java各方面基础知识 尤其是线程的知识有更深一步的了解!!! 本次坦克大

JAVA基础知识-java文化基础和运行环境

JAVA基础知识 1,java是95年sun公司推出的开发语言,发展很快,09年被oracle公司收购.至今分为SE.ME.EE三个发展方向和软件版本. 2,运行java的环境主要是通过JVM(java virtual machine)实现的.首先编写.java结尾的源文件,通过编译器编译成.class结尾的字节码文件,然后通过解释器实现在不同平台上一致运行的效果. 3,jvm,jre和jdk的区别:jvm,java虚拟机:jre,java运行环境,jdk:java开发工具包. 4,jdk的下载

你得学会并且学得会的Socket编程基础知识

这一篇文章,我将图文并茂地介绍Socket编程的基础知识,我相信,如果你按照步骤做完实验,一定可以对Socket编程有更好地理解. 本文源代码,可以通过这里下载 http://files.cnblogs.com/chenxizhang/SocketWorkshop.rar 第一步:创建解决方案 第二步:创建服务端程序 这里可以选择“Console Application”这个类型,比较方便调试 然后编写如下代码,实现服务器的基本功能 using System; using System.Coll

三层控件基础知识

一. 基础知识Delphi Multi-tier程序多以MIDAS为基础,因此以MIDAS为基础建立的Delphi Multi-tier程序,客户端和服务器端都要MIDAS.DLL文件的支持.1) 远程数据模块:远程数据模块是一个类似于COM Automation Server或是Corba Server的数据模块,它存在于应用程序服务器中,负责提供应用程序服务器上的数据提供者组件(Provider)接口给客户端应用程序使用.Delphi目前提供的远程数据模块有TRemoteDataModule

android基础知识13:AndroidManifest.xml文件解析

1.重要性 AndroidManifest.xml是Android应用程序中最重要的文件之一.它是Android程序的全局配置文件,是每个 android程序中必须的文件.它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件 (activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息. 因此,该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所

ffmpeg入门基础知识

获取ffmpeg源代码 如果你是在Windows环境下,则可以先装SVN的一个客户端TortoiseSVN(非常好用,强烈推荐),他安装完成后会集成在右键菜单中,点Checkout菜单,在弹出的界面中输入:svn://svn.mplayerhq.hu/ffmpeg/trunk,然后选择一个本地目录,按确定就可以把ffmpeg的源代码下载到你指定的目录中了. FFMPEG功能 视频音频格式转换 关于 frame的一些基本知识 帧速率 帧速率是每秒显示的图像数.标准影片(NTSC) 是29.97 帧