翻译《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);
}

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

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

相关推荐
孞㐑¥1 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
AI袋鼠帝2 小时前
Claude4.5+Gemini3 接管电脑桌面,这回是真无敌了..
人工智能·windows·aigc
MZ_ZXD0012 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
獨枭3 小时前
Windows 下安装与使用 Miniconda 完整指南
windows
A星空1233 小时前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
凡人叶枫4 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
会叫的恐龙4 小时前
C++ 核心知识点汇总(第六日)(字符串)
c++·算法·字符串
小糯米6014 小时前
C++顺序表和vector
开发语言·c++·算法
命里有定数4 小时前
保姆级教程:在 Windows (WSL2) 下本地部署 Qwen3-ASR
windows
独望漫天星辰4 小时前
C++ 多态深度解析:从语法规则到底层实现(附实战验证代码)
开发语言·c++