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