窗口、菜单与快捷键体系
别名: 菜单栏 · 加速键 · 访问键 · 命令清单
概念解释
Windows 把一个应用的功能收进窗口这个单位里:标题栏、系统菜单、应用菜单或功能区、以及快捷键,是同一份命令清单(command inventory)的三种入口。菜单列出窗口此刻能做的全部事;快捷键是这份清单上的别名,不是另一套平行界面。Alt 把焦点送进菜单,带下划线的访问键在菜单打开后可直接点中某一项,Ctrl 组合则在菜单未打开时触发同一条命令。
它回答的是「功能如何被发现、被键盘打到、被窗口框住」,不是窗口可以自由拉伸到任意尺寸。把常用操作只做在工具条上、菜单里找不到、快捷键也不在菜单右侧标注,等于把清单拆成了互不相认的三份——鼠标用户、键盘用户和屏幕阅读器用户会各自摸到不同的功能子集。
机制
窗口是命令的作用域。最小化、最大化、关闭和移到其他桌面,是系统对这个作用域的操作,出现在标题栏和系统菜单里,应用不应再造一套会和系统打架的窗口控件。应用自己的命令则挂在菜单或功能区上,并在项的右侧写出快捷键——菜单因此同时承担「发现」和「学习快捷键」两件事。快捷键之所以能被预期,是因为它指向清单里已有的那一条;清单里没有的键会被当成未声明行为,也更容易和系统级快捷键冲突。
访问键(菜单打开后的字母)和加速键(随时可按的组合)不是同一层:前者依赖菜单已经可见,用来在可见清单里跳转;后者绕过菜单直接执行。两者都映射回同一条命令,状态(灰掉、打勾、带开/关)必须在菜单项、工具条按钮和快捷键上同时生效。否则用户会用快捷键触发一条菜单里显示不可用的命令,或反过来。
边界
沉浸式全屏(演示、游戏、媒体)会收起菜单栏,此时命令清单必须改由系统提供的弹出菜单或明确的「退出全屏后回到菜单」路径,不能把功能只留在已经看不见的顶栏。触屏优先、没有稳定键盘的设备上,访问键的发现成本很高,菜单仍要可点,快捷键是加速而不是唯一入口。UWP 风格的窄命令栏和传统桌面菜单栏可以共存于同一产品的不同窗口,但不能让同一窗口里两套清单内容不一致。浏览器和 Office 类多文档窗口里,命令作用域是当前文档还是整个应用必须写清,否则「关闭」会关错对象。系统级快捷键(切换窗口、锁定、输入法)不能被应用覆盖;冲突时让路的是应用。
怎么落地
- 为窗口维护一份命令清单:每个可执行动作都能在菜单或功能区里找到,并在该项旁标注快捷键。
- 工具条只放清单的子集,不发明菜单里没有的动作;灰掉、选中勾、开/关等状态在菜单、工具条和快捷键上同步。
- 不要自绘一套最小化/关闭,也不要拦截系统快捷键;访问键和加速键都指向清单里的同一条命令。
- 验证:藏掉工具条,只靠菜单能否走完主任务;再藏掉菜单提示,只靠快捷键走同一条任务,核对菜单右侧标注与实际按键一致。任意一步「菜单里没有但按钮有」或「键按下了但菜单显示不可用」,说明清单已经分裂。最后按一次系统级快捷键,确认应用没有把它吃掉。