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


Функция 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
0x000000000L
Указывает, что параметр uPosition предоставляет идентификатор элемента меню. Флаг MF_BYCOMMAND используется по умолчанию, если ни MF_BYCOMMAND, ни флаг MF_BYPOSITION не указан.
MF_BYPOSITION
0x00000400L
Указывает, что параметр uPosition дает относительное положение элемента меню на основе нуля.
 

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

Ценность Значение
MF_BITMAP
0x000000004L
Использует растровое изображение в качестве элемента меню. Параметр lpNewItem содержит дескриптор растрового изображения.
MF_CHECKED
0x000000008L
Поместите флажок рядом с элементом. Если приложение предоставляет растровые изображения флажка (см. функцию SetMenuItemBitmaps ), этот флаг отображает выбранную растровую карту рядом с элементом меню.
MF_DISABLED
0x000000002L
Отключает элемент меню, чтобы его нельзя было выбрать, но этот флаг не серо.
MF_ENABLED
0x000000000L
Включает элемент меню, чтобы его можно было выбрать и восстановить из его серого состояния.
MF_GRAYED
0x000000001L
Отключает элемент меню и серый цвет, чтобы его нельзя было выбрать.
MF_MENUBARBREAK
0x000000020L
Функции, аналогичные флагу MF_MENUBREAK для строки меню. В раскрывающемся меню, подменю или контекстном меню новый столбец отделяется от старого столбца вертикальной линией.
MF_MENUBREAK
0x000000040L
Помещает элемент в новую строку (для строк меню) или в новом столбце (для раскрывающегося меню, подменю или контекстного меню) без разделения столбцов.
MF_OWNERDRAW
0x00000100L
Указывает, что элемент является элементом, нарисованным владельцем. Перед первым отображением меню окно, которое владеет меню, получает сообщение WM_MEASUREITEM для получения ширины и высоты элемента меню. Затем сообщение WM_DRAWITEM отправляется в процедуру окна владельца при каждом появлении элемента меню.
MF_POPUP
0x00000010L
Указывает, что элемент меню открывает раскрывающееся меню или подменю. Параметр uIDNewItem указывает дескриптор раскрывающегося меню или подменю. Этот флаг используется для добавления имени меню в строку меню или в пункт меню, который открывает подменю в раскрывающееся меню, подменю или контекстное меню.
MF_SEPARATOR
0x00000800L
Рисует горизонтальную линию деления. Этот флаг используется только в раскрывающемся меню, подменю или контекстном меню. Строка не может быть серой, отключенной или выделенной. Параметры lpNewItem и uIDNewItem игнорируются.
MF_STRING
0x000000000L
Указывает, что элемент меню является текстовой строкой; параметр lpNewItem — это указатель на строку.
MF_UNCHECKED
0x000000000L
Не помещать флажок рядом с элементом (по умолчанию). Если приложение предоставляет растровые изображения флажка (см. функцию setMenuItemBitmaps ), этот флаг отображает четкое растровое изображение рядом с элементом меню.

[in] uIDNewItem

Тип: UINT_PTR

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

[in, optional] lpNewItem

Тип: LPCTSTR

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

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

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

Тип: BOOL

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

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

Замечания

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

Чтобы ускорители клавиатуры работали с растровым изображением или элементами меню, нарисованным владельцем, владелец меню должен обработать сообщение WM_MENUCHAR. Дополнительные сведения см. в меню Owner-Drawn и сообщения 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 или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка 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