高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先


テクニカルQ&A

TB52 - LMGetTheMenu と LMSetMenuHook
(1998 年 12 月 17 日)


Q: 『Inside Macintosh』によると、LMGetTheMenu は現在ハイライトされているメニューのメニュー ID を返すはずですが、LMSetMenuHook に渡したアドレスを持つルーチン内で LMGetTheMenu を呼び出すと、戻り値は常にゼロになってしまいます。どこに問題があるのでしょうか。

A: LMGetTheMenu に関するドキュメンテーションの説明は明解ではありません。この呼び出しは、MenuSelect を呼び出した後で現在ハイライトされているタイトルを持つメニューの ID を返すと考えられます。しかし、ユーザがメニューから選択を行っているとき、Menu Manager はこの変数の更新を行いません。更新が行われるのは選択が終了した後です。要するに、MenuHook の実行時に LMGetTheMenu は正常に動作しません。

特定のメニューがプルダウンされているかどうかを知る必要がある場合は、カスタムメニュー定義 ('MDEF') を使用することができます。サンプルコードについては、Developer CD Series の最新の Tool Chest Edition を参照してください。あるいは、LMSetMBarHook を使用することも可能です。この呼び出しのパラメータはメニューが描画される直前にだけ呼び出されます。この後は、どのメニューがプルダウンされているかを検出するために渡された矩形を使用できます。ただし、いずれの方法もできればお勧めできません。これらの状況を認識する必要がないようにプログラムを再設計することをお勧めします。
参考文献 Inside Macintosh: Menu Manager


-- Pete Gontier
Worldwide Developer Technical Support