|
|||||
|
|||||
|
||||||
|
モーダルダイアログでもモードレスダイアログでも、
ポップアップメニューアイテムのUI更新ハンドラを使用できます。 以下に示すのは、これまでに作成したダイアログにポップアップメニューアイテムのUI更新ハンドラを追加する手順です。 ここでは、ダイアログにメニューバーを追加し、[常に手前に表示]というメニューアイテムを作成して メニューアイテムが選択されるたびに、UI更新ハンドラによってメニューアイテムのチェックマークの付加と消去を繰り返すようにします。 なお、ここ示す手順はモーダルダイアログ、モードレスダイアログのどちらにも当てはまります。 ![]() まずはプロジェクトに IDR_MENU_MAINというIDのメニューリソースを追加し、
[常に手前に表示]というメニューアイテムを作成してそれにID_MENUITEM_TOPMOSTというIDを設定します。
次に、ダイアログのプロパティを開き、メニューとしてIDR_MENU_MAINを指定します。
これでダイアログにメニューが追加されます。![]() 次に、UI更新ハンドラを使用するためには CUpdateUIクラスが必要になるため、
atlframe.hヘッダをインクルードします。
次に、 CUpdateUIクラスをダイアログクラスであるCMainDlgクラスの基底クラスにします。
CMainDlgクラス内では、UI更新ハンドラマップにID_MENUITEM_TOPMOST用のエントリを追加します。
さらにメッセージマップにはID_MENUITEM_TOPMOST用のコマンドハンドラエントリと、
CUpdateUIクラスへのチェーンを追加します。
次に、 CMainDlgクラスにID_MENUITEM_TOPMOSTのコマンドメッセージハンドラを追加します。
これで、ポップアップメニューアイテム用のUI更新ハンドラが動くようになります。 まず、ダイアログにメニューを追加することで、メニューが表示されるときに WM_INITMENUPOPUPメッセージが
ダイアログに送られてくるようになります。
CMainDlgクラスのメッセージマップではWM_INITMENUPOPUPメッセージを処理しないため、
このメッセージはチェーン先のCUpdateUIクラスへ送られます。
CUpdateUIクラスの基底クラスであるCUpdateUIBaseには
WM_INITMENUPOPUPメッセージハンドラが用意されており、
そこでポップアップメニューアイテムが更新されます。
|