Пример в этом разделе содержит части кода из прикладной программы, которая создает и показывает на экране контекстное меню, разрешающее пользователю установить атрибуты шрифта и шрифты. Приложение показывает на экране меню в рабочей области основного окна всякий раз, когда пользователь щелкает левой кнопкой мыши.
Здесь шаблон меню для контекстного меню, который дается в файле определения ресурса прикладной программы
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); }
|