Win32 API. Меню
Страница 13. Создание меню класса


 

Создание меню класса

Следующий пример показывает, как создать меню класса для прикладной программы, создать окно, которое использует меню класса и обрабатывать команды меню в оконной процедуре.

Ниже следует важная часть заголовочного файла прикладной программы:

// Идентификатор ресурса шаблона меню
#define IDM_MYMENURESOURCE 3

Ниже следует важная часть самого приложения:

HINSTANCE hinst;

int APIENTRY WinMain(hinstance, hPrevInstance, lpCmdLine, nCmdShow)
HINSTANCE hinstance;
HINSTANCE hPrevInstance;
LPSTR lpCmdLine;
int nCmdShow;
{
MSG msg;// сообщение
WNDCLASS wc;// данные класса окна
HWND hwnd;// дескриптор главного окна

// Создадим класс окна для основного окна.
// Определим идентификатор ресурса шаблона меню как
// элемент lpszMenuName структуры WNDCLASS, чтобы
// создать меню класса.


wc.style = 0;
wc.lpfnWndProc = (WNDPROC) MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hinstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = MAKEINTRESOURCE(IDM_MYMENURESOURCE);
wc.lpszClassName = "MainWClass";

if (!RegisterClass(&wc))
return FALSE;

hinst = hinstance;

// Создадим основное окно. Установим параметр
// hmenu в значение ПУСТО (NULL) так, чтобы Windows
// использовал меню класса для окна.


hwnd = CreateWindow("MainWClass", "Sample Application",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hinstance,
NULL);

if (hwnd == NULL)
return FALSE;

// Сделаем окно видимым и передадим сообщение
// WM_PAINT в оконную процедуру.


ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);

// Запустим главный цикл сообщений.

while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
UNREFERENCED_PARAMETER(hPrevInstance);
}

LRESULT APIENTRY MainWndProc(hwnd, uMsg, wParam, lParam)
HWND hwnd;
UINT uMsg;
WPARAM wParam;
LPARAM lParam;
{
switch (uMsg) {
.
. // Обработка других сообщений окна.
.


case WM_COMMAND:
// Проверка идентификатора командного пункта меню.
switch(LOWORD(wParam)) {
case IDM_FI_OPEN:
DoFileOpen();// определяется программой
break;
case IDM_FI_CLOSE:
DoFileClose();// определяется программой
break;
.
. // Обработка других команд меню.
.

default:
break;
}
return 0;
.
. // Обработка других сообщений окна.
.


default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return NULL;
}
 
« Предыдущая статья   Следующая статья »