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

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

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

相关推荐
小呀小叮当~2 分钟前
OpenAI Codex 桌面版(Windows / macOS)体验分享:AI 编程效率再次提升
人工智能·windows·macos
Starry-sky(jing)1 小时前
Win11 装 ESP32 Arduino 库卡 3 小时?我把官方 3.3.10 全平台 522MB 搬到了蓝奏云,解压即用
运维·windows·esp32·arduino·离线安装
王老师青少年编程9 小时前
2026年6月GESP真题及题解(C++一级):交税
c++·题解·真题·gesp·一级·2026年6月·交税
疋瓞13 小时前
python和C++对比(1)_数据类型和数据结构
数据结构·c++·python
C语言小火车13 小时前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序
程序员老油条14 小时前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2
ALex_zry14 小时前
C++26 std::complex 结构化绑定详解:auto [re, im] = c
c语言·开发语言·c++
_olone16 小时前
Luogu P2704 [NOI2001] 炮兵阵地
c++·算法·状压dp
c2385616 小时前
互斥锁高频面试题全解:从基础概念到底层实现,一文通关
java·c++·面试·职场和发展
nianniannnn16 小时前
c++复习自存--继承
开发语言·c++