菜单基础知识

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。

原文地址:https://www.cnblogs.com/mxbs/p/6262353.html