zoukankan      html  css  js  c++  java
  • 菜单基础知识

    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形式呈现。

     

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

  • 相关阅读:
    对称的二叉树
    二叉树的下一个结点
    Go操作Redis实战
    重写Laravel异常处理类
    【论文笔记】Learning to Estimate 3D Human Pose and Shape from a Single Color Image(CVPR 2018)
    ffmpeg第一弹:ffmpeg介绍和开发环境搭建
    程序员你是如何使用镜像中心Harbor的?
    SpringBoot 的 MyBatis 多数据源配置
    Typora+PicGo+Gitee搭建博客写作环境(超详细)
    重学数据结构(八、查找)
  • 原文地址:https://www.cnblogs.com/mxbs/p/6262353.html
Copyright © 2011-2022 走看看