在对话框管理这个主题上,其中一个最不应该做的事情,就是:在将一个拥有输入焦点的控件禁用之前,没有将焦点移走。如果出现这种情况,用户在键盘上输入的内容将不会输送至对话框,为什么?
因为一个被禁用的窗口不能接收任何的键盘输入。如果恰好这个时候电脑没有鼠标(举个例子而已,现代的电脑系统,一般都会配备有鼠标),则对话框基本没法以任何方式被用户使用了。
(我曾经在一款微软的软件产品中碰到过这类错误场景,实在是令人非常沮丧啊。)
当你选择禁用一个控件之前,请检查它当前是否拥有输入焦点。如果是的话,则需要先将焦点切换到其他控件,然后再禁用它,这样用户可以继续正常地输入信息到对话框。
如果你不确定需要将焦点移动到哪个控件,则你可以将这个选择权交还给对话框管理器。具体来说,就是向对话框发送WM_NEXTDLGCTL消息,如下图所示:
在上面的代码中,我们封装了一个禁用对话框控件的帮助函数。首先判断目标控件是否具有输入焦点,如果是,则向对话框窗口发送WM_NEXTDLGCTL消息来将焦点移走。最后,我们就可以安全地禁用目标控件了。
(当然,你也不应该禁用对话框上的所有控件,如果那样的话,用户会再一次地遭遇上面所说的情况。)
总结这也算是一个用户体验设计的小知识点。咱们开发出来的东西,先将自己变成用户,实际体验一下,看看感觉是不是很糟糕?
也即:己所不欲,勿施于人。
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Never leave focus on a disabled control》
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。