WIN32汇编语言教程:第05章 使用资源 · 5.1 菜单和加速键(1)
5.1.1 菜单和加速键的组成
如图5.1所示,在窗口中菜单位于标题栏下面,这个菜单称为“主菜单”或“顶层菜单”,菜单中的菜单项有“文件”、“查看”和“帮助”;单击主菜单上的项目后,可以弹出下一层菜单,叫做“弹出式菜单”或“子菜单”,子菜单中可以继续包含下一层子菜单,如单击“查看”弹出一个子菜单后,再单击其中的“工具栏”可以继续弹出一个子菜单,在子菜单中可以继续弹出下一层子菜单的菜单项最右边用一个三角箭头来表示。
有的程序在窗口的客户区单击鼠标右键也可以弹出一个菜单,单击标题栏图标也可以弹出一个系统菜单,这些菜单都属于弹出式菜单。
菜单中的菜单项有好几种,从资源定义的角度来看,分隔用的横线也是一个菜单项,除横线外其他菜单项可以供用户选择,也可以设置为“禁止”或“灰化”状态暂时停用,如图5.1中“被禁用的菜单项”和“被灰化的菜单项”所示。“禁用”的菜单项看上去和普通菜单项相同,但无法在上面单击鼠标,“灰化”的菜单项从外观上就已经表示是不可用的。菜单项也可以在左边显示选中标记,如图5.1中的“大图标”前的圆点和“状态栏”前的对钩,圆点表示选中标记是互斥的,对钩表示是不互斥的。
图5.1 菜单示意图
加速键就是菜单项的快捷键,如图5.1中的“字体”菜单项右边有个说明,表示当窗口是激活的时候,不必打开菜单,直接按“Alt”加“F”的组合键就相当于选择了“字体”菜单项,同样,直接按下“Ctrl”加“Alt”加“B”键等于选择了“背景色”菜单项,加速键也是资源的组成部分,一般将最常用的菜单项定义为加速键,以减少打开菜单的操作。加速键的定义要遵循惯例,如“Ctrl+C”和“Ctrl+V”一般定义为“拷贝”和“粘贴”,“Ctrl+X”定义为“剪切”等。当然加速键的定义并不是必需的,不定义加速键并不会影响程序的功能。
不管程序中是否定义加速键,Windows总是定义了几个默认的加速键,如“F10”键会打开窗口的主菜单,“Alt+空格”会打开系统菜单,“Alt+F4”等于单击了“关闭”按钮等。
5.1.2 菜单和加速键的资源定义
先来看一个用于演示菜单和加速键使用的例子程序,所有的源文件包含在所附光盘的Chapter05\Menu目录下面,运行后产生如图5.1所示的菜单,目录中包括资源脚本文件Menu.rc,汇编源文件Menu.asm,makefile文件和图标、光标等文件,这里是资源脚本文件Menu.rc:
#include <resource.h> #define ICO_MAIN Ox1000 //图标 #define IDM_MAIN Ox2000 //菜单 #define IDA_MAIN Ox2000 //加速键 #define IDM_OPEN Ox4101 #define IDM_OPTION Ox4102 #define IDM_EXIT Ox4103 #define IDM_SETFONT Ox4201 #define IDM_SETCOLOR Ox4202 #define IDM_INACT Ox4203 #define IDM_GRAY Ox4204 #define IDM_BIG Ox4205 #define IDM_SMALL Ox4206 #define IDM_LIST Ox4207 #define IDM_DETAIL Ox4208 #define IDM_TOOLBAR Ox4209 #define IDM_TOOLBARTEXT Ox4210 #define IDM_INPUTBAR Ox4211 #define IDM_STATUSBAR Ox4212 #define IDM_HELP Ox4301 #define IDM_ABOUT Ox4302 //################################################################## ICO_MAIN ICON "Main.ico" //################################################################## IDM_MAIN menu discardable BEGIN popup "文件(&F)" BEGIN menuitem "打开文件(&O)...",IDM_OPEN menuitem "关闭文件(&C)...",IDM_OPTION menuitem separator menuitem "退出(&X)",IDM_EXIT END popup "查看(&V)" BEGIN menuitem "字体(&F)...\tAlt+F",IDM_SETFONT menuitem "背景色(&B)...\tCtrl+Alt+B",IDM_SETCOLOR menuitem separator menuitem "被禁用的菜单项",IDM_INACT,INACTIVE menuitem "被灰化的菜单项",IDM_GRAY,GRAYED menuitem separator menuitem "大图标(&G)",IDM_BIG menuitem "小图标(&M)",IDM_SMALL menuitem "列表(&L)",IDM_LIST menuitem "详细资料(&D)",IDM_DETAIL menuitem separator popup "工具栏(&T)" BEGIN menuitem "标准按钮(&S)",IDM_TOOLBAR menuitem "文字标签(&C)",IDM_TOOLBARTEXT menuitem "命令栏(&I)",IDM_INPUTBAR END menuitem "状态栏(&U)",IDM_STATUSBAR END Popup "帮助(&H)" ,HELP BEGIN menuitem "帮助主题(&H)\tF1",IDM_HELP menuitem separator menuitem "关于本程序(&A)...",IDM_ABOUT END END //################################################################## IDA_MAIN accelerators BEGIN VK_F1, IDM_HELP, VIRTKEY "B", IDM_SETCOLOR, VIRTKEY,CONTROL,ALT "F", IDM_SETFONT, VIRTKEY,ALT END //##################################################################