3

私のアプリケーションでは、コンテキストに基づいてメニュー項目を有効/無効にしています。テキスト領域にフォーカスがある場合は、ナビゲーションキー(Ctrl-左/右など)と競合するアクセラレータを無効にします。

Microsoftのドキュメントによると:

アクセラレータがメニュー項目と同じ識別子を持ち、メニュー項目がグレー表示または無効になっている場合、アクセラレータは無効になり、WM_COMMANDまたはWM_SYSCOMMANDメッセージを生成しません。

ただし、関連付けられたメニューアクセラレータがまだアクセラレータテーブルにある場合、TranslateAcceleratorは、メッセージをディスパッチしない(つまり、キーボードイベントを「食べる」)にもかかわらず、trueを返します。

TranslateAcceleratorが実際にメッセージをディスパッチしたかどうかを判断する方法があるかどうか疑問に思っていますか?メニュー項目を有効または無効にするたびにアクセラレータテーブルを再構築しないようにしています。

4

0 に答える 0