主要补充上一篇文章的,也主要面对Windows,对于Linux和Unix来说,只有在搞了桌面才用得上。写过图形界面程序的朋友就没必要看本文了,这只是个科普文章。
最早的时候,计算机都是字符界面的,所以那时候没有也没必要用鼠标。后来鼠标和图形界面出来以后(在这之前好像还有轨迹球什么的),键盘的使用频率就低了很多,因为很多需要敲一堆命令的操作现在只需要点一下鼠标。然而有时候要面对一个很尴尬的情况:鼠标忽然坏了怎么办,如果恰好你正在编辑重要文件,那就抓狂了。
而实际上,迄今为止的所有图形界面系统,包括Unix和Linux加装了桌面环境,都是可以无鼠标操作的。
首先说一下“焦点”的概念,在多数程序中,细心的人会发现有些按钮会有一个虚线框,大概从Vista系统开始,看的不是那么明显了,像这样:
早前的系统是这样的:
在Windows和Linux的图形系统下,我们可以用Tab键来让焦点在所有控件内转移,有些需要输入的地方会用光标代替,这也是“当前控件”的一种形式。
先说焦点的切换吧,Tab键可以应对大多数情况,但遇到单选多选这种,可能移动不到你想操作的那个地方,这是为啥呢?
这里有个“容器”的概念,如果一个容器把多个控件给整进去了(一般是单选这种情况最多),那么这个容器内同一时间只会有一个控件获得焦点,像这样:
遇到这种情况,直接用上下左右箭头就可以在“容器内”转移焦点。
关于焦点,需要注意的是其实控件并不一定“可以获得焦点”,能否获得要看程序猿是怎样设置的,像按钮什么的也是可以设置为“不接受焦点”的。
还有要注意的是有些控件自身是具有“排他性”的,比如单选,所以一般都把单选放在一个框框里(容器),这样的话可以有多个“组”的单选被选中,如果全都直接放窗体的话,则只能选一个(其实窗体甚至桌面也是容器)。
然后说说操作方法:
我们的操作都是针对“当前窗体”的,如果不是,那么可以按住Alt,用Tab选择要操作的窗体或者程序,列举一下操作和后悔药:
1,窗体,窗体比较特殊,只要这个窗体是“当前窗体”(也就是标题栏是亮色的),我们随时可以用Alt+空格来调出窗体菜单,用上下键切换,用回车键执行菜单,一般是这样的:
比如遇到这么个情况:窗体不知道怎么跑到屏幕最边上了,鼠标点不到他,所以就拖不进来,这时候用Alt+空格把菜单调出来,窗体的菜单是一定会出现在屏幕内的,这时候不要用鼠标,就用键盘执行“移动”菜单,然后用上下左右箭头把窗口搞到屏幕内,按回车就停下来了。
2,编辑框,像一般输入用户名密码这种,或者大段文字那种一大块的,这种都属于输入框,有些键盘可以用右边Ctrl旁的那个表格样子的按钮敲出来,没有那个键的也可以用Shift+F10敲出来,一般是这样的:
编辑框的后悔药,一般来说Ctrl+字母Z 可以后退一步,仅有一步,有些软件可以回撤所有操作,但大多数只能回撤一次的。
3,按钮类。包括按钮、单选多选、滚动条等。先说滚动条,当焦点转移过去的时候,直接用上下左右箭头就可以控制。然后说单选多选,获得焦点以后呢,用空格操作多选,用箭头操作单选就行了。
这里特别说一下按钮,这个比较特殊,因为每个窗体是可以设置一个“默认”按钮和一个“取消”按钮的,两者对应的是回车和Esc键,也就是说不论有木有获得焦点,只要不是在编辑框中,敲回车就会直接触发这个“默认”按钮,而不论是否处于编辑框中,只要按Esc都会触发“取消”这个按钮。这里单独说是为了界定一个情况,假设这个窗体没有设置这两个默认操作键,那么获得焦点的按钮是会响应回车的,而如果设置了默认键,则按了回车可能会发生你想象不到的意外。为了不产生误操作,最好是用空格来“点击”按钮。
关于后悔药,假设你点了一个错误的按钮,而且后果特严重,那么你点下的时候不要松开鼠标,把箭头挪到按钮外面,松开鼠标就行。绝大多数程序猿是有这个节操的,但若遇到没节操的,那就真没办法了,后面会补充一些这方面的知识。
如果是键盘操作呢,按着空格的时候就别松开,再按一下Esc键就可以了,这个按钮就会弹起来,并且不会触发对应的按钮代码。
本来都写完了,忽然想到应该补充一些。
当我们进了系统以后,默认情况“当前窗体”或者说当前容器应该是桌面,但如果装的程序多了,右下角启动了几个程序,则此时我们的操作有可能并不在桌面,这时候怎么办?
有两个办法
第一,用快捷键Win+D,这个快捷键是“显示桌面”,而这个功能会让桌面重新获得焦点,也就是成为“当前窗体”(其实桌面也是个窗体类的)。
第二,用快捷键Win+X(XP、2003及以前的系统)或者Win+E(Vista、win7及以后的系统)打开一个资源管理器,然后找一下桌面或者直接打开相应的东西。
一般来说,对于控件上有“向下或者向右箭头”的,都可以用键盘上的箭头把内容展现出来,如果不行,则Alt加箭头可以,如果还不行,那就是真不行了。。。
按钮的知识
鼠标点一个按钮,会触发 mousemove/mousedown/mouseenter/mouseleave/mouseup 等等事件,而这一组事件合起来成为一个click事件,这还不包括跟窗体绘图有关的,也不包括这个进程的窗体消息等等,也就是说点一下鼠标至少会产生几十个事件交给操作系统和窗体。
绝大多数时候,程序猿都是响应的“click”这个事件,极少数程序和一些比较特殊的程序可能响应的是其他事件。
本文只能应对大多数程序,对于比较另类或者有特殊需求的程序可能没用,像下面这个程序我试了很多办法,没有鼠标的话我确实整不出来菜单,甚至连窗体菜单都调不出来:
他这个程序的窗体及内容全都是自己拦截了API进行重绘的,对付这种程序,除非提前就知道他的快捷键,否则我也没招,我估计他作者自己都没招。对了,QQ这种也是,不过QQ有节操,还是响应窗体菜单的。