GetMenuState 函数 (winuser.h)

检索与指定菜单项关联的菜单标志。 如果菜单项打开子菜单,此函数还会返回子菜单中的项数。

注意GetMenuState 函数已被 GetMenuItemInfo 取代。 但是,如果不需要 GetMenuItemInfo 的任何扩展功能,仍然可以使用 GetMenuState。
 

语法

UINT GetMenuState(
  [in] HMENU hMenu,
  [in] UINT  uId,
  [in] UINT  uFlags
);

参数

[in] hMenu

类型: HMENU

包含要检索其标志的菜单项的菜单的句柄。

[in] uId

类型: UINT

要检索其菜单标志的菜单项,由 uFlags 参数确定。

[in] uFlags

类型: UINT

指示如何解释 uId 参数。 此参数的取值可为下列值之一:

含义
MF_BYCOMMAND
0x00000000L
指示 uId 参数提供菜单项的标识符。 如果未指定MF_BYCOMMAND和MF_BYPOSITION标志,则MF_BYCOMMAND标志为默认值。
MF_BYPOSITION
0x00000400L
指示 uId 参数提供菜单项的从零开始的相对位置。

返回值

类型: UINT

如果指定的项不存在,则返回值为 -1。

如果菜单项打开子菜单,则返回值的低序字节包含与该项关联的菜单标志,而高序字节包含项打开的子菜单中的项数。

否则,返回值为菜单标志 (按位或) 掩码。 下面是与菜单项关联的菜单标志。

返回代码/值 说明
MF_CHECKED
0x00000008L
检查标记放置在下拉菜单、子菜单和快捷菜单的项 (旁边,仅) 。
MF_DISABLED
0x00000002L
该项已禁用。
MF_GRAYED
0x00000001L
该项已禁用且灰显。
MF_HILITE
0x00000080L
突出显示该项。
MF_MENUBARBREAK
0x00000020L
这与 MF_MENUBREAK 标志相同,但下拉菜单、子菜单和快捷菜单除外,其中新列与旧列用垂直线分隔。
MF_MENUBREAK
0x00000040L
该项放置在菜单栏) 的新行 (上,或放置在下拉菜单、子菜单和快捷菜单的新列 (中,) 不分隔列。
MF_OWNERDRAW
0x00000100L
项由所有者绘制。
MF_POPUP
0x00000010L
菜单项是一个子菜单。
MF_SEPARATOR
0x00000800L
下拉菜单、子菜单和快捷菜单的水平分隔线 (仅) 。

注解

可以测试项的标志值为 MF_ENABLEDMF_STRINGMF_UNCHECKEDMF_UNHILITE。 但是,由于这些值等于零,因此必须使用表达式来测试它们。

标志 要测试标志的表达式
MF_ENABLED ! (Flag&(MF_DISABLED | MF_GRAYED))
MF_STRING ! (Flag&(MF_BITMAP | MF_OWNERDRAW))
MF_UNCHECKED ! (Flag&MF_CHECKED)
MF_UNHILITE ! (Flag&HILITE)
 

示例

有关示例,请参阅 在菜单中模拟复选框

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll
API 集 Windows 10版本 10.0.10 (240 中引入的 ext-ms-win-ntuser-menu-l1-1-2)

请参阅

概念性

获取菜单

GetMenuItemCount

GetMenuItemID

GetMenuItemInfo

菜单

引用