Windows API Урок 23. Создаем меню
Пора в нашу программу добавить меню.
Делаем это следующим образом: сначала вызываем CreateMenu для создания главного меню приложения. Потом путем вызова InsertMenuItem добавляем пункты в наше главное меню. Затем присоединяем созданное меню к окну путем вызова функции SetMenu. И, наконец, показываем меню на экране - для этого мы вызываем DrawMenuBar.
Приступаем к конкретному коду.
Для начала создадим вспомогательную функцию CreateMenuItem (она служит для вставки новых элементов в меню):
BOOL CreateMenuItem (HMENU hMenu, char* str,
UINT uID, UINT wID, HMENU hSubMenu)
{
// Заполняем структуру mi.
MENUITEMINFO mi;
mi.cbSize = sizeof(MENUITEMINFO);
mi.fMask = MIIM_STATE|MIIM_TYPE|MIIM_SUBMENU|MIIM_ID;
mi.fType = MFT_STRING;
mi.fState = MFS_ENABLED;
mi.dwTypeData = str;
mi.cch = sizeof(str);
mi.wID = wID;
mi.hSubMenu = hSubMenu; // Устновка подменю.
// Вставляем меню.
return InsertMenuItem(hMenu, uID, FALSE, &mi);
}
Наша функция принимает следующие параметры: первый - идентификатор меню, в котрый мы вставляем новый пункт меню. Второй - заголовок пункта меню. Именно его пользователь и увидит. Третий параметр - идентификатор нашего пункта меню. И, наконец, последний параметр - это еще одно подменю, которое будет принадлежать нашему подменю.
Теперь надо добавить в оконную процедуру обработчик для сообщения WM_CREATE. В нем мы как раз и выполняем шаги по созданию меню, описанные в начале этого урока:
LONG WINAPI WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
// Главное меню.
static HMENU hMainMenu;
switch (Message){
case WM_CREATE:
// Создаем главное меню.
hMainMenu = CreateMenu();
// Добавление пунктов к главному меню.
CreateMenuItem(hMainMenu, "Tools", 0, 0, NULL);
CreateMenuItem(hMainMenu, "Help", 1, 0, NULL);
// Присоединяем меню к окну.
SetMenu(hWnd, hMainMenu);
// Создание полосы меню.
DrawMenuBar(hWnd);
break;
...
Можно запускать программу. Наши (пока не работающие) пункты меню будут выглядеть так:
|