Win32 API 日本語リファレンス
ホーム › UI.Shell › IMenuBand

IMenuBand

COM
IID568804cd-cbd7-11d0-9816-00c04fd91972継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Component Object Model (COM) オブジェクトが適切なメッセージを受け取って変換できるようにするメソッドを公開します。

解説(Remarks)

アプリケーションは、以下のいずれかのサービス ID を指定して QueryService を呼び出すことができます。QueryService の riid パラメーターが IAccessible または IDispatch の場合、QueryService の呼び出しにより新しいアクセシビリティ オブジェクトが作成されます。それ以外の場合、QueryService の呼び出しは、以下のようにサービス ID を指定した QueryInterface の呼び出しと同等です。

サービス ID (SID) 意味
SID_SMenuBandChild サブメニュー用の IMenuBand インターフェイスへのポインターを取得します。
SID_SMenuBandParent 親メニュー用の IMenuBand インターフェイスへのポインターを取得します。
SID_SMenuBandTop トップメニュー用の IMenuBand インターフェイスへのポインターを取得します。

Windows 2000 では、このインターフェイスは browseui.dll で実装されていました。ただし、このバージョンの使用は推奨されません。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT IsMenuMessage(MSG* pmsg)

メッセージ ポンプは、いずれかのメッセージを Component Object Model (COM) オブジェクトへリダイレクトすべきかどうかを確認するために、このメソッドを呼び出します。

pmsgMSG*inMSG 構造体へのポインター。

戻り値

型: HRESULT

このメソッドは、以下のいずれかの値を返すことがあります。

戻り値 説明
S_OK
メッセージを COM オブジェクトへリダイレクトする必要があります。アプリケーションは、このメッセージを指定して IMenuBand::TranslateMenuMessage を呼び出す必要があります。
E_FAIL
メニューはメニュー モードを終了しており、破棄できます。

解説(Remarks)

このメソッドが S_OK を返した場合、メッセージ ループは TranslateMessage や DispatchMessage を呼び出してはなりません。

vtbl 4 HRESULT TranslateMenuMessage(MSG* pmsg, LRESULT* plRet)

Component Object Model (COM) オブジェクトのメッセージを変換します。

pmsgMSG*inout受信したメッセージを格納する MSG 構造体へのポインター。
plRetLRESULT*out変換後のメッセージへのポインター。

戻り値

型: HRESULT

このメソッドは、以下のいずれかの値を返すことがあります。

戻り値 説明
S_OK
メッセージは処理されたため、削除する必要があります。
S_FALSE
メッセージは処理されませんでした。この場合、*plRet は NULL です。

解説(Remarks)

通常、このメソッドの前に IMenuBand::IsMenuMessage が呼び出されます。IMenuBand::TranslateMenuMessage は、メッセージ ポンプではなく親ウィンドウ プロシージャが、すべてのメッセージに対して呼び出す必要があります。

このメソッドは pmsg の値を変更することがあります。変更した場合は、その変更を後続へ引き継ぐ必要があります。

一部のモーダル メッセージ ポンプはカスタムの変換メソッドの呼び出しを許可しないため、このメソッドが必要です。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。

出力引数:
#define global IID_IMenuBand "{568804CD-CBD7-11D0-9816-00C04FD91972}"
#usecom global IMenuBand IID_IMenuBand "{5B4DAE26-B807-11D0-9815-00C04FD91972}"
#comfunc global IMenuBand_IsMenuMessage         3 var
#comfunc global IMenuBand_TranslateMenuMessage  4 var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。