• 网站刚刚上线,难免有不足的地方,敬请谅解!欢迎提出宝贵意见!

  •    3年前 (2015-07-30)  windows开发 专业技术 |   4 条评论  258 
    文章评分 3 次,平均分 5.0

    【Windows编程】系列第七篇:Menubar的创建和使用

    上一篇我们学习了利用windows API创建工具栏和状态栏,与上一篇紧密联系的就是菜单栏,菜单栏是一个大多数复杂一些的Windows应用程序不可或缺的部分。比如下图就是Windows自带的记事本的菜单栏:

    【Windows编程】系列第七篇:Menubar的创建和使用

    菜单一般都是在标题栏下,工具栏以上,常常叫主菜单或顶级菜单(top-level menu),顶级菜单可能还会有弹出菜单(popup menu)或子菜单(submenu)。弹出菜单还有被“选中”(checked)状态,各菜单还有启用、禁用状态。

    每一个菜单都有一个ID与之对应,当某个菜单被点击是,程序在WM_COMMAND消息中把菜单ID传给应该消息处理函数,就能知道哪个菜单被按下。

    菜单栏的创建最常见是利用VS的菜单资源编辑器,然后加载该资源。比如下面的代码片段在创建主窗体时使用了LoadMenu函数加载菜单资源编辑的菜单:

     

    另外一种办法是在处理WM_CREATE消息是调用SetMenu函数来设置菜单:

     

    本文一直秉承一个原则,就是采用API的方式来创建而不是资源。因为用API来创建虽然麻烦一点,但是更加独立,比如如果不是用VS环境,那就可能没有资源编辑了,要是把我们的源程序在非VS的环境下编译就能显示出通用性和可移植性了。

    • 菜单消息

    当用户选择一个菜单时,会产生WM_INITMENU消息和WM_MENUSELECT,WM_INITMENU消息使得我们有机会在菜单的选中之前做一些事情,而WM_MENUSELECT消息是在菜单被选中或者光标移到该菜单时被发送,我们可以利用这个消息进行菜单选中时的处理。

    WM_INITMENUPOPUP消息在一个弹出菜单显示前发送,可以用来修改一些菜单显示。

    最重要、最常用的就是上面我们提到的WM_COMMAND消息,当菜单被点击时就会产生这个消息。上面的消息对应的参数意义请参考MSDN。

    • 菜单创建

    菜单相关的API有好几十个,我们这里只用一些常用的API函数,这几个函数基本可以完成菜单的基本功能,更多的菜单函数和功能的请参考MSDN。

    函数CreateMenu可以创建一个菜单,CreatePopupMenu创建一个下拉式或弹出是菜单。函数AppendMenu可以追加一个菜单项,函数InsertMenu可以插入一个菜单项,TrackPopupMenu函数将在指定的位置显示一个弹出菜单。这几个菜单原型如下:

     

    其实菜单的常用部分大都是用这几个函数完成的,并不复杂。不说了,直接一边上代码一边解释更直接,我们通过以下demo演示运用这几个常见的函数来创建和使用菜单:

     

    本demo运行后点击“文件”菜单如下:

    【Windows编程】系列第七篇:Menubar的创建和使用

    点击“编辑”菜单如下:

    【Windows编程】系列第七篇:Menubar的创建和使用

    鼠标右键弹出快捷菜单:

    【Windows编程】系列第七篇:Menubar的创建和使用

    文篇只演示了常用的菜单,其他比如位图菜单、非客户区弹出菜单等更多内容有兴趣在讨论,也可以参考MSDN的相关函数自己进行测试。本文的菜单栏编程结合上一篇的创建工具栏和状态栏内容以及第二篇的创建常用控件部分,基本可以完成窗口应用程序的界面编程了。当然再次强调,我们这些都是基于Windows API函数完成的,可能很多人会说,我用MFC,资源编辑器,对话框下的控件面板、甚至VB、C#都可以很快编写出这些界面。没错,但是隐藏在这些的下面还是会回到我们这些基本的API上,这个才是根。

    更多经验交流可以加入Windows编程讨论QQ群454398517

     

    关注微信公众平台:程序员互动联盟(coder_online),你可以第一时间获取原创技术文章,和(java/C/C++/Android/Windows/Linux)技术大牛做朋友,在线交流编程经验,获取编程基础知识,解决编程问题。程序员互动联盟,开发人员自己的家。

    【Windows编程】系列第七篇:Menubar的创建和使用

    转载请注明出处http://www.coderonline.net/?p=1268,谢谢合作!

     

    本文原始地址:http://www.coderonline.net/programming-windows-seventh-part-series-menubar-creates-and-uses.html

    本站所有文章,除特别注明外,均为本站原创,转载请注明出处来自http://www.coderonline.net/

    否则保留追究法律责任的权利!

    关于

    发表评论

    表情 格式
    1. 博主的文对我帮助很大 感谢博主 !!

      dt 评论达人 LV.2 3年前 (2015-07-31) [0] [0]
      • @dt写博客的目的就是希望对读者有帮助!

        john 作 者 3年前 (2015-07-31) [0] [0]
    2. 总结的真棒

      raul 评论达人 LV.5 3年前 (2015-07-30) [0] [0]
    1. […] 上一篇我们学习了菜单的基本编程,本篇来了解一下通用对话框的使用。Windows系统之所以是目前最流行的桌面系统,也是因为Windows有一套标准化,统一友好的交互界面,比如菜单、工具栏、状态栏以及各个控件。当然除了这些单独的控件之外,对于像文件打开、保存对话框,字体对话,颜色对话框等对于Windows本身会用到,在很多第三方的应用程序中也会用到。因此微软公司也早就清楚这种现实情况会存在,所以Windows把这种常见的公共对话就做了统一的接口函数,供Windows自己和第三方开发者使用。 […]

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册