按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
}
//………………………………………………………………………………………………………………………………………………………………………………
// WM_MAND handler for File|Save。
void DMainFrame::OnFileSave()
{
AfxMessageBox(_T(〃File|Save mand selected。〃));
}
//………………………………………………………………………………………………………………………………………………………………………………
// WM_MAND handler for File|Save。
void DMainFrame::OnFilePrint()
{
AfxMessageBox(_T(〃File|Print。。。 mand selected。〃));
}
第三节 快捷键消息响应
键盘加速键有时也叫键盘捷径;它使用户可用键盘发出命令。Windows
API提供了加速键表资源;用以保存加速键定义集合。AppWizard生成
一单文档或多文档应用程序时;提供一个加速键表当通过调用
CFrameWnd::LoadFrame来初始化一个帧(CFrameWnd)窗口时;则加速键
表被自动连接到该帧窗口。
…………………………………………………………Page 251……………………………………………………………
但有几点我们必须提出来说一下。首先;在Microsoft研制Windows
时,并没有考虑到加速键系统。毕竟在当时看来,Windows所要支持
的,最主要的应该是鼠标和菜单――毫无疑问,这是当时许多的GUI
系统 (包括著名的Star 和Apple的Macintosh)得以成功的巨大原
因。但出于Microsoft对第三方厂家软件的一贯支持,Windows系统中
还是加入了加速键支持部分。在今天看来,Microsoft的这一步,实
际上具有重大的意义,这至少可以从两个方面加以说明:并不能强迫
所有的计算机都以鼠标作为输入手段,也并不是在所有的情形下,鼠
标输入都较键盘输入为快,而且,对一些已经习惯了键盘输入的用户
来说,使用鼠标输入即使只是一个很容易的转变,可毕竟也还是一个
转变,用户需要对此有一个适应的过程。
同时也应该指出的时,Microsoft在
中特别提出,为增强Windows95应用程序的一致性,键盘命令 “不应
该是进行特定操作的唯一方法。”实际上,指南中将加速键称为 “捷
径”多少说明了Microsoft的倾向:它应该也只能是其它命令输入机
制的一种补充而不是替代。它只应该是以鼠标作为主要输入手段的
Windows系统的一种平衡。实际上,我们需要注意的一点就是,我们
所建立的加速键,要么是使用菜单项进行逐项选择较麻烦,或者是我
们在系统中使用频率相当高的部分,同时,加速键要尽量简单,否则
加速键就失去了其本来的意义。遵循这些简单的原则,我们就能开发
出用户界面简捷的应用程序。
在本节中,为了理解的清晰,我们将首先简单的介绍一下键盘输入的
处理,然后,我们将进行加速键的处理的介绍。我们将尽量介绍清楚
键的使用规则及其运行机制,最后,作为一个小小的补充,我们将介
绍如何动态地安装一个加速键表。
下面,我们首先简单地介绍一下键盘输入。
在中介绍了四种键盘输入:正文
键,访问键,模式键以及快捷键。正文键指的是可打印字符:大小写
字母,数字,标点符号及其它符号。用户期望用字符和数字键来产生
可打印的字符和数字。而访问键 (记忆键)则我们在菜单中经常提到
的与Alt键一起组合按下时,可以访问弹出式菜单项或对话框控制。
由于可能与加速键间产生冲突,我们一般应避免将加速键定义为Alt
键加上一个字母或数字键。模式键指的是封锁键与修改键。它们改变
其它键或输入设备的动作。从IBM PC机继承下来的标准Windows兼容
键盘有三个封锁键:Caps Lock;Num Lock 和Scroll Lock。而修改键
Shift;Ctrl和Alt使可用于定义的加速键成数倍的增长。任何在其它
几类中定义的键都可以作为快捷键 (包括功能键F1至F12,光标移动
…………………………………………………………Page 252……………………………………………………………
键Home;向上箭头,向下箭头等)。用这些 键与修改键结合,就能够
产生许多加速键。当然,我想,使用104键键盘的用户一定也会注意
到键盘上的Windows键及Application键,其中Windows键为一附加的
修改键,为操作系统保留,而Application键则在程序中用于引导出
上下文菜单。
接下来我们看一看定义加速键的方法。这包含两个步骤。
首先,我们需要创建一个加速键资源。
图5。 23 加速键表编辑器
图5。23为系统显示的编辑加速键表时的特性对话框。其本身包含三
列:ID,键以及类型。命令ID标识了当用户按下一个加速键时通过
WM_MAND消息所传送的命令码。我们已经知道,系统调用消息映射
进行识别是通过消息的ID号辨识的,因此,如果两条消息的ID号相
同,它们所调用的消息处理函数就是相同的。形象一些地说,如果我
们的程序中有菜单项与加速键所对应的ID号均为ID_TITLE_HELLO,那
么,该加速键与该菜单项所完成的动作就是一样的。键域则标识了加
速键所对应的键盘键。对于数字键或字母键,只需要简单的键入即
可,而对于非打印字符,则需要使用虚拟码。当然,我们觉
得在弄不清楚虚拟键的具体使用时,一个最省属的办法还是单击Next
Key Typed,然后直接指定我们所需要的键 (此时系统会 自动帮助我
们采集消息并填入个域中)。如果不是使用上面的方法,我们所还需
要做的最后一件事就是填写修改键域。按照Windows的建议,我们应
首先考虑使用Ctrl键,然后再使用其它键。虽然使用Type域中ASCII
选项以便区分所指定的键的大小写是可能的,然而,绝大多数的用户
会对如此严格要求的键厌烦的,进一步的后果当然就是放弃该程序。
所以,使用VirtKey几乎总是合适的选择。
…………………………………………………………Page 253……………………………………………………………
图5。 24 加速键提示设计
绝大多数时候我们需要为加速键创建一个菜单提示。这一步在前面的
菜单设计中我们实际上已经遇到过,我们一般是在具有加速键的菜单
项右侧显示的。如图5。24中,在Caption域中,
Say &HellotCtrl+H
的前一部分指示菜单项, “t”后面的部分则指定了该菜单项的加速
键是Ctrl+H。
l 注意
l 初学者往往认为在菜单项中作上述设定以后就同时指定了相应的
加速键,而不用加速键编辑器进行指定。那么,菜单项中所指定
的加速键实际上是不开用的。
对没有相应的菜单项与之相对应的加速键,我们应通过一些
途径 (例如放在帮助文件中)告诉用户。(除非你本来就没
打算让用户知道。)
l 我们还需要再重新提一下加速键定义的原则 (参考):
尽可能指派用户容易操作的单键
使得修改-字母-键组合不是特别敏感 (避免混乱)。
对不使用Shift键的键或键组合动作的扩展和补充动作最好使
用Shift键组合。例如,如果使用Alt+Tab从上到下选择控件
焦点,那么使用Shift+Alt+Tab键组合就是一个很不错的安
排。
对作用范 围较大的动作用Ctrl键组合。例如,在大家熟悉的
记事本中,使用Home来移动到客户编辑区的光标所在行开始
…………………………………………………………Page 254……………………………………………………………
处,而使用Ctrl+Home键从编辑区的任一�