我最近意识到Windows对话管理器显然将助记符称为不可见的控件。例如,如果我通过"&Foo"
在对话框中隐藏了标有ShowWindow(SW_HIDE)
的按钮,则按Alt + F会触发按钮。
为什么Windows会这样做? (我猜测很久以前某个开发人员可能使用隐藏控件作为穷人实现隐藏键盘快捷方式的方法,并且为了向后兼容性而保留了这种不直观的行为。)< / p>
更重要的是:在我通过整个代码库审核所有ShowWindow
站点并使它们明确禁用隐藏控件之前,是否有任何可行的方法来在对话管理器中调整此行为?我有点惊讶的是,我还没有找到很多信息/抱怨这个;我能找到的最好的是an old Microsoft KB article archived by a third-party,它建议通过子类覆盖每个控件的WM_GETTEXT
处理程序。 (对于可能隐藏的每一个控件来说,这似乎都是相当苛刻的事情。)
(另请注意,该文章讨论了已禁用的控件,而非隐藏控件,因此对话管理器也不会忽略已禁用的控件。这也可以观察到通过创建一个隐藏的,禁用的复选框,该复选框与一个可见的启用的助手共享一个助记符。按下助记键将焦点移动到可见的复选框,但不会像通常那样切换它,就像一个典型的助记符碰撞情况一样。)