IOleInPlaceFrame::SetMenu 方法 (oleidl.h)

将复合菜单添加到包含就地激活对象的窗口框架。

语法

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

参数

[in] hmenuShared

复合菜单的句柄,由调用 IOleInPlaceFrame::InsertMenusInsertMenu 函数构造。

[in] holemenu

OleCreateMenuDescriptor 函数返回的菜单描述符的句柄。

[in] hwndActiveObject

对象拥有的窗口的句柄,以及要向其发送菜单消息、命令和快捷键的句柄。

返回值

此方法在成功时返回S_OK。 其他可能的返回值包括以下内容。

返回代码 说明
E_INVALIDARG
指定的句柄无效。
E_UNEXPECTED
发生意外错误。

注解

调用方备注

对象调用 IOleInPlaceFrame::SetMenu 以要求容器安装通过调用 IOleInPlaceFrame::InsertMenus 设置的复合菜单结构。

实施者说明

此方法的 SDI 容器实现应调用 SetMenu 函数。 MDI 容器应发送 WM_MDISETMENU 消息,使用 hmenuShared 作为要安装的菜单。 容器应调用 OleSetMenuDescriptor 来安装 OLE 调度代码。

停用时,容器必须调用 IOleInPlaceFrame::SetMenu,指定 NULL 以删除共享菜单。 这样做是为了最大程度地减少窗口重绘。 容器还应调用 OleSetMenuDescriptor,指定 NULL 以取消调用调度代码。 最后,对象应用程序调用 OleDestroyMenuDescriptor 来释放数据结构。

注意 执行 IOleInPlaceFrame::SetMenu 时,不要调用 PeekMessageGetMessage 函数或对话框。 这样做可能会导致系统死锁。 从 IOleInPlaceFrame::SetMenu 中可以调用哪些 OLE 接口方法和函数存在进一步限制。
 

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 oleidl.h

另请参阅

IOleInPlaceFrame

IOleInPlaceFrame::InsertMenus

InsertMenu

OleDestroyMenuDescriptor

OleSetMenuDescriptor