IOleInPlaceFrame::SetMenu メソッド (oleidl.h)

インプレースでアクティブ化されているオブジェクトを含むウィンドウ フレームに複合メニューを追加します。

構文

HRESULT SetMenu(
  [in] HMENU    hmenuShared,
  [in] HOLEMENU holemenu,
  [in] HWND     hwndActiveObject
);

パラメーター

[in] hmenuShared

IOleInPlaceFrame::InsertMenus 関数と InsertMenu 関数の呼び出しによって構築された複合メニューへのハンドル。

[in] holemenu

OleCreateMenuDescriptor 関数によって返されるメニュー記述子へのハンドル。

[in] hwndActiveObject

オブジェクトが所有し、メニュー メッセージ、コマンド、アクセラレータを送信するウィンドウへのハンドル。

戻り値

このメソッドは、成功したS_OKを返します。 その他の可能な戻り値は次のとおりです。

リターン コード 説明
E_INVALIDARG
指定されたハンドルが無効です。
E_UNEXPECTED
予期しないエラーが発生しました。

注釈

呼び出し元へのメモ

オブジェクトは IOleInPlaceFrame::SetMenu を呼び出して、 IOleInPlaceFrame::InsertMenus の呼び出しによって設定された複合メニュー構造をインストールするようにコンテナーに要求します。

実装者へのメモ

このメソッドの SDI コンテナーの実装では 、SetMenu 関数を呼び出す必要があります。 MDI コンテナーは、インストールするメニューとして hmenuShared を使用して、WM_MDISETMENU メッセージを送信する必要があります。 コンテナーは OleSetMenuDescriptor を呼び出して、OLE ディスパッチ コードをインストールする必要があります。

非アクティブ化する場合、コンテナーは IOleInPlaceFrame::SetMenu を呼び出し、共有メニューを削除するには NULL を 指定する必要があります。 これは、ウィンドウの再描画を最小限に抑えるために行われます。 また、コンテナーは OleSetMenuDescriptor を呼び出し、 NULL を 指定してディスパッチ コードのフックを解除する必要があります。 最後に、オブジェクト アプリケーションは OleDestroyMenuDescriptor を呼び出してデータ構造を解放します。

メモIOleInPlaceFrame::SetMenu の実行中は、PeekMessage 関数や GetMessage 関数、またはダイアログ ボックスを呼び出さないでください。 これにより、システムがデッドロックする可能性があります。 IOleInPlaceFrame::SetMenu 内から呼び出すことができる OLE インターフェイスのメソッドと関数には、さらに制限があります。
 

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー oleidl.h

こちらもご覧ください

IOleInPlaceFrame

IOleInPlaceFrame::InsertMenus

InsertMenu

OleDestroyMenuDescriptor

OleSetMenuDescriptor