菜单资源
WINDOWS程序的菜单通常编译前定义在资源文件中,程序员可使用VC自带的资源编辑器可视化地编辑菜单资源,在资源文件中自动生成相关脚本,对于WIN32汇编程序员,最好能看懂这些自动生成的脚本,VC程序员在完成一些特殊程序时也需要亲自看看这些脚本文件。笔者用VC向导生成一个空的单文档程序,下面是VC自动生成的脚本文件中,我们一起对其中的菜单资源进行分析:
/
//
// Menu
//
//
// Menu
//
IDR_MAINFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP "文件(&F)"
BEGIN
MENUITEM"新建(&N)\tCtrl+N", ID_FILE_NEW
MENUITEM"打开(&O)...\tCtrl+O", ID_FILE_OPEN
MENUITEM"保存(&S)\tCtrl+S", ID_FILE_SAVE
MENUITEM"另存为(&A)...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM"打印(&P)...\tCtrl+P", ID_FILE_PRINT
MENUITEM"打印预览(&V)", ID_FILE_PRINT_PREVIEW
MENUITEM"打印设置(&R)...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM"最近文件", ID_FILE_MRU_FILE1,GRAYED
MENUITEM SEPARATOR
MENUITEM"退出(&X)", ID_APP_EXIT
END
POPUP "编辑(&E)"
BEGIN
MENUITEM"撤消(&U)\tCtrl+Z", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM"剪切(&T)\tCtrl+X", ID_EDIT_CUT
MENUITEM"复制(&C)\tCtrl+C", ID_EDIT_COPY
MENUITEM"粘贴(&P)\tCtrl+V", ID_EDIT_PASTE
END
POPUP "查看(&V)"
BEGIN
MENUITEM"工具栏(&T)", ID_VIEW_TOOLBAR
MENUITEM"状态栏(&S)", ID_VIEW_STATUS_BAR
END
POPUP "帮助(&H)"
BEGIN
MENUITEM "关于test1(&A)...", ID_APP_ABOUT
END
END
BEGIN
POPUP "文件(&F)"
BEGIN
MENUITEM"新建(&N)\tCtrl+N", ID_FILE_NEW
MENUITEM"打开(&O)...\tCtrl+O", ID_FILE_OPEN
MENUITEM"保存(&S)\tCtrl+S", ID_FILE_SAVE
MENUITEM"另存为(&A)...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM"打印(&P)...\tCtrl+P", ID_FILE_PRINT
MENUITEM"打印预览(&V)", ID_FILE_PRINT_PREVIEW
MENUITEM"打印设置(&R)...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM"最近文件", ID_FILE_MRU_FILE1,GRAYED
MENUITEM SEPARATOR
MENUITEM"退出(&X)", ID_APP_EXIT
END
POPUP "编辑(&E)"
BEGIN
MENUITEM"撤消(&U)\tCtrl+Z", ID_EDIT_UNDO
MENUITEM SEPARATOR
MENUITEM"剪切(&T)\tCtrl+X", ID_EDIT_CUT
MENUITEM"复制(&C)\tCtrl+C", ID_EDIT_COPY
MENUITEM"粘贴(&P)\tCtrl+V", ID_EDIT_PASTE
END
POPUP "查看(&V)"
BEGIN
MENUITEM"工具栏(&T)", ID_VIEW_TOOLBAR
MENUITEM"状态栏(&S)", ID_VIEW_STATUS_BAR
END
POPUP "帮助(&H)"
BEGIN
MENUITEM "关于test1(&A)...", ID_APP_ABOUT
END
END
一、菜单项的定义:
1、文字菜单项目的定义
MENUITEM"新建(&N)\tCtrl+N", ID_FILE_NEW
菜单项的定义方式是:MENUITEM 菜单文字,命令ID,选项列表
选项列表是可选项,也可以不定义。这定义了一个菜单项,显示的名称是新建(&N)Ctrl+N,命令ID是ID_FILE_NEW,没有选项列表,菜单文字定义中的“\t”为什么没显示出来呢?因为\t代表TAB字符,会使其后面的文字右对齐。
菜单项有以下选项:
CHECKED:打上选定标志
GRAYED:灰化
INACTIVE:禁用
MENUBREAK或MENUBARBREAK:把这个菜单项和以后的菜单项列到新的列中
我们把下面这段资源文件用记事本打开,给“新建”加上CHECKED选项,给“最近文件”加上GRAYED,给“打印”然后用VC重新编译运行一下这个程序。
MENUITEM"新建(&N)\tCtrl+N", ID_FILE_NEW,CHECKED
MENUITEM"打开(&O)...\tCtrl+O", ID_FILE_OPEN
MENUITEM"保存(&S)\tCtrl+S", ID_FILE_SAVE
MENUITEM"另存为(&A)...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM"打印(&P)...\tCtrl+P", ID_FILE_PRINT,MENUBREAK
MENUITEM"打印预览(&V)", ID_FILE_PRINT_PREVIEW
MENUITEM"打印设置(&R)...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM"最近文件", ID_FILE_MRU_FILE1,GRAYED
MENUITEM SEPARATOR
MENUITEM"退出(&X)", ID_APP_EXIT
MENUITEM"打开(&O)...\tCtrl+O", ID_FILE_OPEN
MENUITEM"保存(&S)\tCtrl+S", ID_FILE_SAVE
MENUITEM"另存为(&A)...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM"打印(&P)...\tCtrl+P", ID_FILE_PRINT,MENUBREAK
MENUITEM"打印预览(&V)", ID_FILE_PRINT_PREVIEW
MENUITEM"打印设置(&R)...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM"最近文件", ID_FILE_MRU_FILE1,GRAYED
MENUITEM SEPARATOR
MENUITEM"退出(&X)", ID_APP_EXIT
从图5.1可以看出修改后,文件菜单已经按照我们要求的方式变了形。
图5.1
2、分隔符的定义
从图5.1中可以看出最近文件与退出之间有个分隔符,它的定义方式是:
MENUITEM SEPARATOR
3、弹出菜单项
POPUP"文件(&F)",
POPUP"编辑(&E)"
这些都是弹出菜单项,弹出菜单项的定义方式如下L
POPUP 菜单文字,选项列表
BEGIN
子菜单项定义
END
对于弹出菜单项,也可用选项列表,有兴趣的读者用记事本打开资源文件,将 POPUP"编辑(&E)"改为 POPUP"编辑(&E)",GRAYED,用VC重新编译运行一下试试效果吧
二、菜单的定义
IDR_MAINFRAME MENUPRELOAD DISCARDABLE
从上面的资源文件中可以看出,VC生成的默认单文档程序中只有一个菜单,菜单ID是IDR_MAINFRAME,菜单的定义方式是:
菜单IDMENU [DISCARDABLE]
DISCARDABLE表示菜单不用时从暂时从内存中卸掉。
PRELOAD 表示预加载该资源