IMenuBand
COM公式ドキュメント
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。
メッセージ ポンプは、いずれかのメッセージを Component Object Model (COM) オブジェクトへリダイレクトすべきかどうかを確認するために、このメソッドを呼び出します。
| pmsg | MSG* | in | MSG 構造体へのポインター。 |
戻り値
型: HRESULT
このメソッドは、以下のいずれかの値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| メッセージを COM オブジェクトへリダイレクトする必要があります。アプリケーションは、このメッセージを指定して IMenuBand::TranslateMenuMessage を呼び出す必要があります。 | |
| メニューはメニュー モードを終了しており、破棄できます。 |
解説(Remarks)
このメソッドが S_OK を返した場合、メッセージ ループは TranslateMessage や DispatchMessage を呼び出してはなりません。
Component Object Model (COM) オブジェクトのメッセージを変換します。
| pmsg | MSG* | inout | 受信したメッセージを格納する MSG 構造体へのポインター。 |
| plRet | LRESULT* | out | 変換後のメッセージへのポインター。 |
戻り値
型: HRESULT
このメソッドは、以下のいずれかの値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| メッセージは処理されたため、削除する必要があります。 | |
| メッセージは処理されませんでした。この場合、*plRet は NULL です。 |
解説(Remarks)
通常、このメソッドの前に IMenuBand::IsMenuMessage が呼び出されます。IMenuBand::TranslateMenuMessage は、メッセージ ポンプではなく親ウィンドウ プロシージャが、すべてのメッセージに対して呼び出す必要があります。
このメソッドは pmsg の値を変更することがあります。変更した場合は、その変更を後続へ引き継ぐ必要があります。
一部のモーダル メッセージ ポンプはカスタムの変換メソッドの呼び出しを許可しないため、このメソッドが必要です。
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 方式にも切替可。#define global IID_IMenuBand "{568804CD-CBD7-11D0-9816-00C04FD91972}" #usecom global IMenuBand IID_IMenuBand "{5B4DAE26-B807-11D0-9815-00C04FD91972}" #comfunc global IMenuBand_IsMenuMessage 3 sptr #comfunc global IMenuBand_TranslateMenuMessage 4 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。