Пример в этом разделе содержит части кода из прикладной программы, которая создает и показывает на экране контекстное меню, разрешающее пользователю установить атрибуты шрифта и шрифты. Приложение показывает на экране меню в рабочей области основного окна всякий раз, когда пользователь щелкает левой кнопкой мыши.
Здесь шаблон меню для контекстного меню, который дается в файле определения ресурса прикладной программы
| PopupMenu MENU BEGIN POPUP "Dummy Popup" BEGIN POPUP "Fonts" BEGIN MENUITEM "Courier", IDM_FONT_COURIER MENUITEM "Times Roman", IDM_FONT_TMSRMN MENUITEM "Swiss", IDM_FONT_SWISS MENUITEM "Helvetica", IDM_FONT_HELV MENUITEM "Old English", IDM_FONT_OLDENG END POPUP "Sizes" BEGIN MENUITEM "7", IDM_SIZE_7 MENUITEM "8", IDM_SIZE_8 MENUITEM "9", IDM_SIZE_9 MENUITEM "10", IDM_SIZE_10 MENUITEM "11", IDM_SIZE_11 MENUITEM "12", IDM_SIZE_12 MENUITEM "14", IDM_SIZE_14 END POPUP "Styles" BEGIN MENUITEM "Bold", IDM_STYLE_BOLD MENUITEM "Italic", IDM_STYLE_ITALIC MENUITEM "Strike Out", IDM_STYLE_SO MENUITEM "Superscript", IDM_STYLE_SUPER MENUITEM "Subscript", IDM_STYLE_SUB END END END |
Следующий пример дает оконную процедуру и обеспечивающие функции, использованные, чтобы создавать и показывать на экране контекстное меню.
LRESULT APIENTRY MenuWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
RECT rc; // рабочая область
POINT pt; // позиция щелчка мыши
switch (uMsg)
{
case WM_LBUTTONDOWN:
// Получим рабочий прямоугольник рабочей области.
GetClientRect(hwnd, (LPRECT) &rc);
// Получим рабочие координаты для щелчка мыши.
pt.x = GET_X_LPARAM(lParam);
pt.y = GET_Y_LPARAM(lParam);
// Если щелчок мыши пришелся на внутреннюю часть рабочей
// области, выполняется определяемая программой функция,
// которая показывает на экране контекстное меню.
if (PtInRect((LPRECT) &rc, pt))
HandlePopupMenu(hwnd, pt);
break;
// Обрабатываем другие сообщения окна.
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return NULL;
}
VOID APIENTRY HandlePopupMenu(HWND hwnd, POINT pt)
{
HMENU hmenu; // шаблон меню
HMENU hmenuTrackPopup; // контекстное меню
// Загружаем шаблон меню содержащий контекстное меню из
// ресурса приложения.
hmenu = LoadMenu(hinst, "PopupMenu");
if (hmenu == NULL)
return;
// Получаем первое контекстное меню в шаблоне меню. Это меню,
// которое функция TrackPopupMenu показывает на экране.
hmenuTrackPopup = GetSubMenu(hmenu, 0);
// Функция TrackPopup использует экранные координаты, которые
// преобразует в экранные координаты щелчка мыши.
ClientToScreen(hwnd, (LPPOINT) &pt);
// Нарисуем и установим место контекстного меню.
TrackPopupMenu(hmenuTrackPopup, TPM_LEFTALIGN | TPM_LEFTBUTTON,
pt.x, pt.y, 0, hwnd, NULL);
// Разрушим меню.
DestroyMenu(hmenu);
}
|