菜单编写(VC_Win32)

本文详细介绍了在VC_Win32环境下菜单资源的编写,包括.rc文件中的菜单格式,加载/卸载菜单的方法,菜单常用操作,创建弹出菜单的步骤,以及菜单加速键的设置。通过实例代码展示了如何在程序中动态加载和操作菜单,以及如何编写和使用菜单资源加速键。
摘要由CSDN通过智能技术生成

菜单在 .rc 文件中的格式


.rc 中的菜单格式

虽然现在微软的编译器中都会自动生成好用的 rc 资源但是还是可以了解下它内部代码的意义.

这里是不太建议直接在 .rc 文件中修改菜单因为修改了.rc 文件后还需在其他文件中修改对应地方,否则在编译中会报错.所以还是建议在编译器的资源管理器中修改对话框.

格式:

menuID MENU [,载入特性选项]
{
菜单项列表
}

说明:

  • menuID: 菜单资源标识
  • MEMU: 关键字
  • 载入特性: 
    • DISCARDABLE 当不再需要菜单时候菜单可丢弃
    • FIXED 将菜单保存在内存中固定位置
    • LOADONCALL 需要时加载菜单
    • MOVEABLE 菜单在内存中可移动
    • PRELOAD 立即加载菜单
  • 菜单项列表:
    • 弹出菜单/子菜单(POPUP)
      • 格式:
        • POPUP"子菜单名"[,选项]
          BEGIN
          …(菜单项成员)
          END
      • 说明:
        • POPUP:  关键字
        • 子菜单名:  "子菜单的名字&热键"
        • BEGIN:  子菜单中菜单项开始的标识
        • 选项:
          • MENUBARBREAK   菜单项纵向分隔标识
          • CHECKED   显示选中标识
          • INACTIVE   禁止一个菜单项
          • GRAYED   禁止一个菜单项并使其显示灰色
        • 菜单项成员:   子菜单或菜单项(定义如下所示)
        • END:   子菜单中菜单项结束的标识
    • 菜单项(MENUITEM)
      • 格式:  MENUITEM "菜单项名",菜单项标识符(ID)[,选项]
      • 说明:
        • MENUITEM:   关键字
        • 菜单项名:   "菜单项名字&热键"
        • 选项:
          • MENUBARBREAK   菜单项纵向分隔标识
          • CHECKED   显示选中标识
          • INACTIVE   禁止一个菜单项
          • GRAYED   禁止一个菜单项并使其显示灰色 

菜单组成部分

  • 主菜单栏
  • 下拉式菜单框
  • 菜单项热键标识
  • 菜单项加速键标识
  • 菜单项分割线(占据菜单索引)

加载/卸载菜单


加载菜单

在 win32 界面程序中加载菜单有以下几种方式:

  • 在窗口类设计时候进行加载
    在定义 WNDCLASS 时对成员 lpszMenuName 赋予相对应的值
  • 在创建窗口时候进行加载
  • 动态加载菜单

代码示例:

.rc 资源内容

IDR_MENU1 MENU 
BEGIN
    POPUP "菜单1"
    BEGIN
        POPUP "子菜单1.1"
        BEGIN
            MENUITEM "菜单项1.1.1",                    ID_40001
            MENUITEM "菜单项1.2.1",                    ID_40002
        END
        MENUITEM "菜单项1.2",                      ID_40003
        MENUITEM SEPARATOR
        MENUITEM "菜单项1.3",                      ID_40004
        MENUITEM "菜单项1.4",                      ID_40005
    END
    POPUP "菜单2"
    BEGIN
        MENUITEM "菜单项2.1",                      ID_40006
        MENUITEM "菜单项2.2",                      ID_40007
    END
END

加载菜单:

  • 第一种加载方式(类设计时):
    WNDCLASS wndclass;
    
    ....
    wndclass.lpszMenuName=MAKEINTRESOURCE(IDR_MENU1);
    //这里省略了窗体类创建时需要填写的其他信息.
  • 第二种加载方式(窗体创建时):
    HMENU hmenu;
    WNDCLASS wndclass;
    
    ....
    wndclass.lpszMenuName=NULL;
    //这里省略了一些窗体类的必要信息填写,和注册窗口类等操作
    
    //加载菜单到菜单句柄中
    hmenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1));
    //在创建窗体时候载入菜单
    hwnd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值