次の方法で共有


更新ハンドラーが呼び出されるタイミング

たとえば、ユーザーが [ファイル] メニューでマウスをクリックすると、WM_INITMENUPOPUP が生成されます。 フレームワークの更新メカニズムでは、メニューがドロップダウンする前に [ファイル] メニューのすべての項目がまとめて更新され、ユーザーが確認できます。

これを行うには、フレームワークは、標準のコマンド ルーティングに沿って、ポップアップ メニュー内のすべてのメニュー項目の更新コマンドをルーティングします。 ルーティングのコマンド ターゲットには、更新コマンドを (形式 ON_UPDATE_COMMAND_UI の) 適切なメッセージ マップ エントリと一致させ、"更新ハンドラー" 関数を呼び出すことによって、メニュー項目を更新する機会があります。 したがって、6 つのメニュー項目が含まれるメニューの場合、6 つの更新コマンドが送信されます。メニュー項目のコマンド ID に対して更新ハンドラーが存在する場合は、更新を実行するために呼び出されます。 そうでない場合、フレームワークは、そのコマンド ID のハンドラーの存在を確認し、必要に応じてメニュー項目を有効または無効にします。

フレームワークがコマンド ルーティング中に ON_UPDATE_COMMAND_UI エントリを見つけられない場合、同じコマンド ID を持つ ON_COMMAND エントリがある場合は、ユーザー インターフェイス オブジェクトが自動的に有効になります。 それ以外の場合は、ユーザー インターフェイス オブジェクトが無効になります。 したがって、ユーザー インターフェイス オブジェクトが有効になっている場合は、オブジェクトが生成するコマンドのハンドラーを指定するか、更新ハンドラーを指定します。 トピック「ユーザー インターフェイス オブジェクト とコマンド ID」の図を参照してください。

ユーザー インターフェイス オブジェクトの既定の無効化を無効にできます。 詳細については、MFC リファレンスのクラス CFrameWndm_bAutoMenuEnable メンバー」 を 参照してください。

メニューの初期化はフレームワークで自動的に行います。これは、アプリケーションが WM_INITMENUPOPUP メッセージを受け取った場合に発生します。 アイドル ループ中、フレームワークはメニューの場合と同じ方法で、コマンド ルーティングでボタンの更新ハンドラーを検索します。

関連項目

ユーザー インターフェイス オブジェクトの更新方法