Элементы меню
Любой элемент меню должен быть описан с помощью структуры MENUITEMINFO
MENUITEMINFO{ uint chSize, //записывается размер структуры в байтах uint fMask, //указывает ОС с какими полями данной структуры нужно работать uint fType, //задаёт тип элемента uint fState, //задаёт состояние элемента меню
uint wID, //содержит идентификатор пункта меню (#define ID_FILE 200)
HMENU hSubMenu, //содержит дескриптор временного меню или NULL, если его нет HBITMAP hbmpChecked, //содержит дескриптор изображения метки для отмеченного элемента HBITMAP hbmpUnchecked, // содержит дескриптор изображения метки для не отмеченного окна DWORD dwItemData, //определяемое приложение значение, связанное с элементом меню LPTSTP dwTypeData, //содержит отображение элемента uint cch //длина строки dwTypeData
}
Алгоритм создания меню
-
Создание пустого главного меню HMENU CreateMenu(); HMENU hMenu; hMenu = CreateMenu();
-
Создание пустых временных меню HMENU CreatePopupMenu();
-
Вставка элементов во временное меню BOOL InsertMenuItem( HMENU hMenu, //дескриптор меню UINT uItem, //Содержит идентификатор пункта меню, если fByPosition=FALSE и номер позиции того пункта, перед которым нужно вставить новый если fByPosition=TRUE BOOL fByPosition, //показывает как можно интерпретировать пункт LPMENUITEMINFO mii, //указатель на структуру, который содержит инфу о вставляемом пункте меню
MENUITEMINFO mii;
HMENU hGraph;
mii.chSize = sizeof(MENUITEMINFO);
mii.fMask = MIIM_DATA|MIIM_ID|MIIM_STATE|MIIM_TYPE;
mii.fType = MFT_STRING; //обычная строка
mii.fState = MFS_ENABLED;
mii.wID = ID_GRAPH; // #define ID_GRAPH 100
mii.dwItemData = 100;
strcpy(mii.dwTypeData, ‘’Показать график”);
mii.cch = strlen(mii.dwTypeData);
InsertMenuItem(hGraph,ID_GRAPH, FALSE, &mii);
-
Вставка элементов в главное меню, аналогично пункту 3
-
Подключение главного меню к окну BOOL SetMenu (HWND hwnd, HMENU hMenu);
-
Перерисовка меню каждый раз, после проведённых действий над ним. DrawMenuBar (HWND hwnd);
-
Для разрушения меню необходимо вызвать функцию. Вставляется в сообщение WM_DESTROY DestroyMenu (HMENU hMenu)
-
При выборе пункта Menu в оконную функцию поступает сообщение WM_COMMAND, при этом LOWORD(wParam) = идентификатору выбранной команды. case WM_COMMAND: { switch (LOWORD(wParam)) {case Id n.MN: {… return 0; } case ID n.MN2: {… return 0; } }return 0; }return 0;