Функция GetMenuState (winuser.h)

Извлекает флаги меню, связанные с указанным элементом меню. Если элемент меню открывает подменю, эта функция также возвращает количество элементов в подменю.

Примечание Функция GetMenuState заменена функцией GetMenuItemInfo. Однако вы по-прежнему можете использовать GetMenuState, если вам не нужны какие-либо расширенные функции GetMenuItemInfo.
 

Синтаксис

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_BYCOMMANDи MF_BYPOSITION .
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_ENABLED, MF_STRING, MF_UNCHECKED или MF_UNHILITE. Однако, так как эти значения приравниваются к нулю, для их проверки необходимо использовать выражение.

Flag Выражение, проверяемое на наличие флага
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
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll
Набор API ext-ms-win-ntuser-menu-l1-1-2 (представлено в Windows 10 версии 10.0.10240)

См. также раздел

Основные понятия

GetMenu

GetMenuItemCount

GetMenuItemID

GetMenuItemInfo

Меню

Справочные материалы