Поделиться через


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

Изменяет существующий пункт меню. Эта функция используется для указания содержимого, внешнего вида и поведения элемента меню.

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

Синтаксис

BOOL ModifyMenuA(
  [in]           HMENU    hMnu,
  [in]           UINT     uPosition,
  [in]           UINT     uFlags,
  [in]           UINT_PTR uIDNewItem,
  [in, optional] LPCSTR   lpNewItem
);

Параметры

[in] hMnu

Тип: HMENU

Дескриптор меню для изменения.

[in] uPosition

Тип: UINT

Элемент меню, который необходимо изменить, как определено параметром uFlags .

[in] uFlags

Тип: UINT

Управляет интерпретацией параметра uPosition , а также содержимым, внешним видом и поведением элемента меню. Этот параметр должен содержать одно из следующих обязательных значений.

Значение Значение
MF_BYCOMMAND
0x00000000L
Указывает, что параметр uPosition предоставляет идентификатор пункта меню. Флаг MF_BYCOMMAND используется по умолчанию, если не указан флаг MF_BYCOMMAND или MF_BYPOSITION .
MF_BYPOSITION
0x00000400L
Указывает, что параметр uPosition задает отсчитываемую от нуля относительную позицию элемента меню.
 

Параметр также должен содержать по крайней мере одно из следующих значений.

Значение Значение
MF_BITMAP
0x00000004L
Использует точечный рисунок в качестве пункта меню. Параметр lpNewItem содержит дескриптор растрового изображения.
MF_CHECKED
0x00000008L
Places проверка метку рядом с элементом. Если приложение предоставляет проверка растровые изображения (см. функцию SetMenuItemBitmaps), этот флаг отображает выбранное растровое изображение рядом с элементом меню.
MF_DISABLED
0x00000002L
Отключает пункт меню, чтобы его нельзя было выбрать, но этот флаг не будет серым.
MF_ENABLED
0x00000000L
Включает элемент меню, чтобы его можно было выбрать, и восстанавливает его из неактивного состояния.
MF_GRAYED
0x00000001L
Отключает элемент меню и выделяет его серым цветом, чтобы его нельзя было выбрать.
MF_MENUBARBREAK
0x00000020L
Работает так же, как и флаг MF_MENUBREAK для строки меню. Для раскрывающегося меню, подменю или контекстного меню новый столбец отделяется от старого столбца вертикальной линией.
MF_MENUBREAK
0x00000040L
Places элемент в новой строке (для строк меню) или в новом столбце (для раскрывающегося меню, подменю или контекстного меню) без разделения столбцов.
MF_OWNERDRAW
0x00000100L
Указывает, что элемент является элементом, нарисованным владельцем. Перед отображением меню в первый раз окно, которому принадлежит меню, получает WM_MEASUREITEM сообщение для получения ширины и высоты пункта меню. Сообщение WM_DRAWITEM затем отправляется в процедуру окна владельца всякий раз, когда необходимо обновить внешний вид пункта меню.
MF_POPUP
0x00000010L
Указывает, что пункт меню открывает раскрывающееся меню или подменю. Параметр uIDNewItem указывает дескриптор раскрывающегося меню или подменю. Этот флаг используется для добавления имени меню в строку меню или пункта меню, который открывает подменю в раскрывающемся меню, подменю или контекстном меню.
MF_SEPARATOR
0x00000800L
Рисует горизонтальную разделительную линию. Этот флаг используется только в раскрывающемся меню, подменю или контекстном меню. Линия не может быть серой, отключенной или выделенной. Параметры lpNewItem и uIDNewItem игнорируются.
MF_STRING
0x00000000L
Указывает, что элемент меню является текстовой строкой; Параметр lpNewItem является указателем на строку.
MF_UNCHECKED
0x00000000L
Не помещать проверка метку рядом с элементом (по умолчанию). Если приложение предоставляет проверка точечные изображения (см. функцию SetMenuItemBitmaps), этот флаг отображает четкое растровое изображение рядом с элементом меню.

[in] uIDNewItem

Тип: UINT_PTR

Идентификатор измененного пункта меню или, если параметр uFlags имеет флаг MF_POPUP , дескриптор раскрывающегося меню или подменю.

[in, optional] lpNewItem

Тип: LPCTSTR

Содержимое измененного пункта меню. Интерпретация этого параметра зависит от того, включает ли параметр uFlags флаг MF_BITMAP, MF_OWNERDRAW или MF_STRING .

Значение Значение
MF_BITMAP
0x00000004L
Дескриптор точечных рисунков.
MF_OWNERDRAW
0x00000100L
Значение, предоставленное приложением, которое используется для хранения дополнительных данных, связанных с элементом меню. Значение находится в элементе itemData структуры, на которую указывает параметр lParamWM_MEASUREITEM или WM_DRAWITEM сообщений, отправляемых при создании пункта меню или обновлении его внешнего вида.
MF_STRING
0x00000000L
Указатель на строку, завершаемую null (значение по умолчанию).

Возвращаемое значение

Тип: BOOL

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Если ModifyMenu заменяет пункт меню, открывающий раскрывающееся меню или подменю, функция удаляет старое раскрывающееся меню или подменю и освобождает используемую им память.

Чтобы ускорители клавиатуры работали с точечными рисунками или элементами меню, нарисованными владельцем, владелец меню должен обработать WM_MENUCHAR сообщение. Дополнительные сведения см. в разделе Меню, нарисованные владельцем, и сообщение WM_MENUCHAR .

Приложение должно вызывать функцию DrawMenuBar при каждом изменении меню независимо от того, находится ли меню в отображаемом окне. Чтобы изменить атрибуты существующих пунктов меню, гораздо быстрее использовать функции CheckMenuItem и EnableMenuItem .

Следующие группы флагов нельзя использовать вместе:

  • MF_BYCOMMAND и MF_BYPOSITION
  • MF_DISABLED, MF_ENABLED и MF_GRAYED
  • MF_BITMAP, MF_STRING, MF_OWNERDRAW и MF_SEPARATOR
  • MF_MENUBARBREAK и MF_MENUBREAK
  • MF_CHECKED и MF_UNCHECKED

Примеры

Пример см. в разделе Настройка шрифтов для Menu-Item текстовых строк.

Примечание

Заголовок winuser.h определяет ModifyMenu как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента 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-3 (появилось в Windows 10, версия 10.0.14393)

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

AppendMenu

CheckMenuItem

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

DrawMenuBar

EnableMenuItem

Меню

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

SetMenuItemBitmaps

SetMenuItemInfo