菜单在 .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