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

IMenuBand

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

公式ドキュメント

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

解説(Remarks)

アプリケーションは、以下のいずれかのサービス ID を指定して QueryService を呼び出すことができます。QueryServiceriid パラメーターが 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 を返した場合、メッセージ ループは TranslateMessageDispatchMessage を呼び出してはなりません。

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 方式にも切替可。