Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI конспект.docx
Скачиваний:
24
Добавлен:
16.11.2018
Размер:
38.92 Кб
Скачать

Элементы меню

Любой элемент меню должен быть описан с помощью структуры 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

}

Алгоритм создания меню

  1. Создание пустого главного меню HMENU CreateMenu(); HMENU hMenu; hMenu = CreateMenu();

  2. Создание пустых временных меню HMENU CreatePopupMenu();

  3. Вставка элементов во временное меню 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);

  1. Вставка элементов в главное меню, аналогично пункту 3

  2. Подключение главного меню к окну BOOL SetMenu (HWND hwnd, HMENU hMenu);

  3. Перерисовка меню каждый раз, после проведённых действий над ним. DrawMenuBar (HWND hwnd);

  4. Для разрушения меню необходимо вызвать функцию. Вставляется в сообщение WM_DESTROY DestroyMenu (HMENU hMenu)

  5. При выборе пункта 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;