Описанная в справочной системе структура MENUITEMINFO задает свойства вставляемого пункта. Заметим, что, кроме названия пункта, флагов типа «отмечен», «выключен», здесь можно выбрать форму отметки (птичкой, точкой) или вообще задать дескриптор битовой карты, которая будет вместо текстового названия изображать в меню данный пункт. Это позволяет задавать параметры отображения создаваемого пункта меню в самых широких пределах.
Функция InsertMenu() вставляет новый пункт или подменю в позицию, заданную параметром uPosition. Ее синтаксис приведен далее:
Создание и использование меню
BOOL InsertMenuC
HMENU hMenu. //Дескриптор того меню, в которое вставляется подменю.
UINT uPosition. //Позиция пункта меню, перед которым будет вставлено подменю
UINT uFlags. //Свойства вставляемого пункта
UINT uIDNewItem. //Дескриптор вставляемого подменю
//(или идентификатор пункта, если вставляется терминальный пункт). LPCTSTR lpNewItem //Название вставляемого пункта //(если в параметре uFlags задан флаг MFJ3ITMAP. то здесь находится //дескриптор битовой карты, изображающей данный пункт. ); Функция AppendMenu( ) отличается от предыдущей функции тем, что в ней отсутствует параметр uPosition. Новый пункт вставляется в меню последним. Синтаксис этой функции приведен ниже:
BOOL AppendMenu(HMENU hMenu. UINT uFlags.
UINT uIDNewItem. LPCTSTR lpNewItem):
Чтобы удалить из меню пункт или подменю, используется функция DeleteMenu( ), чей синтаксис тоже предельно прост:
BOOL DeleteMenu(HMENU hMenu. UINT uPosition. UINT uFlags ):
Перерисовать в окне измененное меню можно при помощи функции Draw-MenuBar(HWND hWnd).
Если необходимо создать меню программно, а не загружать из шаблона, то при помощи функции HMENU CreateMenu( VOID) можно получить дескриптор пустого меню. Дальнейшее построение меню и вывод его в окно выполняется при помощи рассмотренных выше функций.
В системе Windows, как правило, прикладной программист не работает с внутренними структурами данных напрямую. Он лишь получает набор функций для работы с этими структурами. Меню и другие ресурсы составляют редкое исключение. Кроме дескриптора HMENU программист может получить адрес памяти, в которой хранятся данные, описывающие меню, и работать с ним, вообще не пользуясь системными средствами. Это может оказаться необходимым при создании стереоизображений, когда на одном экране надо показать два изображения меню - для левого и правого глаз.