翻译《The Old New Thing》 - Never leave focus on a disabled control

Never leave focus on a disabled control - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20040804-00/?p=38243

Raymond Chen 2004年08月04日


在对话框管理中,一个大忌是禁用焦点所在的控件而不先将焦点移动到其他地方。

当你这样做时,键盘对对话框就变得无响应了,因为禁用的窗口不会接收输入。

对于没有鼠标的用户(比如说,因为他们有身体上的限制,只能使用键盘),这会导致你的对话框无法使用。

(我甚至在微软的软件中也见过这种情况。这非常令人沮丧。)

在禁用一个控件之前,检查它是否拥有焦点。如果是,那么在禁用它之前先将焦点移动到其他地方,这样用户就不会陷入困境。

如果你不知道焦点应该移到哪个控件,你总是可以让对话框管理器来决定。WM_NEXTDLGCTL消息再次来救援。

cpp 复制代码
void DialogDisableWindow(HWND hdlg, HWND hwndControl)
{
  if (hwndControl == GetFocus()) {
    SendMessage(hdlg, WM_NEXTDLGCTL, 0, FALSE);
  }
  EnableWindow(hwndControl, FALSE);
}

(当然,你绝对不应该禁用对话框上的最后一个控件。那会让用户完全陷入困境,没有逃脱的希望!)

[这篇文章本应该在昨天发布的,但是自动博客工具那天出了问题,忘记了发布这篇文章。抱歉。]

相关推荐
A懿轩A27 分钟前
C/C++ 数据结构与算法【树和森林】 树和森林 详细解析【日常学习,考研必备】带图+详细代码
c语言·c++·考研·数据结构与算法·树和森林
古木20191 小时前
Node.JS 版本管理工具 Fnm 安装及配置(Windows)
windows·node.js
Bucai_不才1 小时前
【C++】初识C++之C语言加入光荣的进化(下)
c语言·c++·面向对象编程
A懿轩A1 小时前
C/C++ 数据结构与算法【哈夫曼树】 哈夫曼树详细解析【日常学习,考研必备】带图+详细代码
c语言·c++·学习·算法·哈夫曼树·王卓
w_outlier1 小时前
cookie__HTTPS
c++·网络协议·http·https
编码小哥2 小时前
C++线程同步和互斥
开发语言·c++
dntktop2 小时前
维克日记:私密写作新选择,轻松记录生活点滴
windows
打鱼又晒网3 小时前
Linux网络 | 网络计算器客户端实现与Json的安装以及使用
linux·c++·网络协议·计算机网络
DARLING Zero two♡4 小时前
【优选算法】Sliding-Chakra:滑动窗口的算法流(上)
java·开发语言·数据结构·c++·算法
hjxxlsx4 小时前
二维数组综合
c++·算法