4

MFCを使用して作成されたWindowsで実行されているアプリケーションがあります。メニュー項目の有効/無効状態は、多くの条件に依存します。たとえば、条件Aが満たされている場合、または条件Bが満たされている場合はメニュー項目を有効にする必要がありますが、AとBの両方が同時にTRUEの場合は無効にする必要があります。これをコードでどのようにモデル化するのですか?ある種のステートマシンを使うべきだと思いますが、私のステートマシンには状態が多すぎるようです。そのような問題を処理する一般的な方法は何ですか?上記は単なる例であり、このような条件はさらに多くなることに注意してください。また、メニューを常に有効にして、ユーザーがメニューを押したときにエラーメッセージを表示するオプションは、メニューを無効にする必要があるため存在しません。

明確にするために、私はMFCでメニュー項目を無効にする方法を探していません。多くの相互依存状態が関係している場合に、メニュー項目を有効/無効にするかどうかを決定する最良の方法を探しています。

4

3 に答える 3

0

updateUIStatus()すべてのUIアクションの後に呼び出されるメソッドを書いてみてください。このメソッドは、条件に基づいてメニュー項目(およびその他のUIコンポーネント)の有効または無効の状態を設定します。

すべてのUI状態の更新を単一のメソッドで実行できることの良い点は、たとえば、if (condition A && condition B) menu.setEnabled(true);

于 2009-03-01T15:59:41.640 に答える
0

ON_UPDATE_COMMAND_UIMFC には、コマンド ルーティングとマクロの形式で、メニュー項目を有効または無効にする組み込みのメカニズムがあります。詳細については、「方法: ユーザー インターフェイス オブジェクトを更新する」および MSDN のCCmdUIクラスのドキュメントを参照してください。

ステートマシンは必ずしも必要ではありません。メニュー コマンドごとに、コマンドを処理する場所 (ドキュメント、ビュー、メイン フレーム クラスなど) を決定し、ハンドラーを実装して、適切なクラスのメッセージ マップ エントリをOnUpdate追加します。ON_UPDATE_COMMAND_UI

例として、私がこの質問に与えた答えを見てください。

于 2009-03-01T16:57:30.643 に答える