私は最近、Windows ダイアログ マネージャーが、目に見えないコントロールのニーモニックを尊重しているように見えることに気付きました。たとえば"&Foo"
、ダイアログでラベル付けされたボタンを で非表示にした場合ShowWindow(SW_HIDE)
、Alt+F を押すとボタンがトリガーされます。
なぜWindowsはこれを行うのですか? (ずっと前に、どこかの開発者が隠しコントロールを隠しキーボード ショートカットを実装する貧弱な方法として使用したのではないかと推測しています。この非直感的な動作は、下位互換性のために保持されています。)
さらに重要なのは、コードベース全体を調べてすべてのShowWindow
サイトを監査し、非表示のコントロールを明示的に無効にする前に、ダイアログ マネージャーでこの動作を調整する適切な方法はありますか? これについて多くの情報や不満を見つけることができなかったことに少し驚いています。私が見つけた最良のものは、サブクラス化によって各コントロールのハンドラーをオーバーライドすることを推奨している、サードパーティによってアーカイブされた古い Microsoft KB 記事のように見えるものです。WM_GETTEXT
(これは、隠されている可能性のあるすべてのコントロールに対して行うのは、かなり手間のかかることのようです。)
(また、この記事では非表示のコントロールではなく無効なコントロールについて説明しているため、ダイアログ マネージャーは無効なコントロールも無視しないことに注意してください。これは、表示されている有効なコントロールとニーモニックを共有する非表示の無効なチェックボックスを作成することによっても確認できます。ニーモニック キーは、表示されているチェックボックスにフォーカスを移動しますが、ニーモニック衝突の典型的なケースのように、通常のように切り替えません。)