菜单基础知识
Posted 大道至简-giserDev
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了菜单基础知识相关的知识,希望对你有一定的参考价值。
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。
以上是关于菜单基础知识的主要内容,如果未能解决你的问题,请参考以下文章
项目一众筹网05_01_[树形结构开发]菜单维护-树形结构基础知识自关联zTree的介绍和使用如果可以尽量不要嵌套循环时间复杂度和空间复杂度的区别