FAQ:WinAPI VCPP:добавить пункт меню

Материал из Весельчак У
Перейти к: навигация, поиск

Как добавить пункт в меню?

BOOL CMenu::InsertMenu(
   UINT nPosition,
   UINT nFlags,,
   UINT_PTR nIDNewItem = 0,
   LPCTSTR lpszNewItem = NULL
);
  • nPosition - индекс или ID (в зависимости от флага MF_BYCOMMAND или MF_BYPOSITION). Если индекс указать равный -1, то вставка произойдёт в конец меню. Указание ID нужно для изменения данных пункта с идентификатором ID (например переименование).
  • nFlags - флаги.
  • nIDNewItem - ID или handle подменю в случае pop-up. В последнем случае во флаги надо добавить MF_POPUP.
  • lpszNewItem - текст пункта. Если текст есть, во флаги добавить MF_STRING.


Примеры вставки различных пунктов:

//указатель на меню
CMenu *pM = ...;
 
//вставка обычного пункта в начало меню
pM->InsertMenu(0, MF_BYPOSITION | MF_STRING, ID_MyItem, "item1");
 
//переименование пункта ID_MyItem 
pM->InsertMenu(ID_MyItem, MF_BYCOMMAND | MF_STRING, ID_MyItem, "my item");
 
//вставка сепаратора в конец меню 
pM->InsertMenu(-1, MF_SEPARATOR, 0, 0);
 
HMENU hM = ...;//хендл под-меню
//вставка пункта с подменю (pop-up) в конец меню
pM->InsertMenu(-1, MF_BYPOSITION | MF_STRING | MF_POPUP, hM, "popup item");