1. 加速键的作用:之前已经讲过了,就是比快捷键还快的按法,一般快捷键需要Alt+顶层菜单项的字母键+子菜单中菜单项的字母键,如果子菜单还有层叠子菜单,则还要再加一个层叠子菜单中菜单项的字母键,而加速键MFC规定,最多只能定义两个键组合,比如Ctrl+N之类的;
2. 编写加速键资源:
1) 加速键也是一种资源,也需要用.rc脚本来定义,加载方式和菜单资源差不多;
2) 定义菜单需要关键字MENU以及菜单资源名,定义加速键同样也需要资源名,当然资源名可以任取,而关键字则成为了ACCELERATORS;
3) 先看下面一个典型的加速键资源的定义:
IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE
BEGIN
"N", ID_FILE_NEW, VIRTKEY, CONTROL
"O", ID_FILE_OPEN, VIRTKEY, CONTROL
"S", ID_FILE_SAVE, VIRTKEY, CONTROL
"Z", ID_EDIT_UNDO, VIRTKEY, CONTROL
VK_BACK, ID_EDIT_UNDO, VIRTKEY, ALT
"X", ID_EDIT_CUT, VIRTKEY, CONTROL
VK_DELETE, ID_EDIT_CUT, VIRTKEY, SHIFT
"C", ID_EDIT_COPY, VIRTKEY, CONTROL
VK_INSERT, ID_EDIT_COPY, VIRTKEY, CONTROL
"V", ID_EDIT_COPY, VIRTKEY, CONTROL
VK_INSERT, ID_EDIT_COPY, VIRTKEY, SHIFT
END
i. 资源属性PRELOAD和MOVEABLE都是16位的产物,32位环境下不起作用;
ii. BEGIN-END中的每一行都定义了一个加速键以及加速键对应的菜单命令;
iii. 每行第一项定义的是加速键的虚拟键代码,注意!对于控制键,例如DELETE、HOME、INSERT等都有相应的虚拟键代码宏,即上面出现的以VK_作为前缀的宏,即Virtual Key的缩写,但是对于正常的英文字符以及阿拉伯数字在任何系统中都没有定义过虚拟键代码宏,只能通过字符串(及双引号"")的形式表示;
!虚拟键代码对应的是键盘上的每个按键,注意和ASCII码区别,ASCII码里字母有大小写之分,但是在键盘上就只有26个英文字母键而不是26个小写字母键和大写字母键,虚拟键码是键盘直接产生的,是一种硬编码,而ASCII码是这种硬编码进入操作系统后转化而成的,因此在.rc文件中就暂且先用ASCII码来代替虚拟键代码宏,而第三项的VIRTKEY关键字则提示编译器,第一项是虚拟键代码,编译器会将ASCII字符替换成真正的虚拟键代码;
!Rc.exe的编译规则:首先会先进行预处理&#x