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を返します。 その他の可能な戻り値は次のとおりです。
リターン コード | 説明 |
---|---|
|
指定されたハンドルが無効です。 |
|
予期しないエラーが発生しました。 |
注釈
呼び出し元へのメモ
オブジェクトは 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 |