Win32 API. Меню
Страница 16. Создание контекстного меню Атрибуты Шрифта (Font-Attributes)


 

Создание контекстного меню Атрибуты Шрифта (Font-Attributes)

Пример в этом разделе содержит части кода из прикладной программы, которая создает и показывает на экране контекстное меню, разрешающее пользователю установить отличительные признаки (атрибуты) шрифта и шрифты. Приложение показывает на экране меню в рабочей области основного окна всякий раз, когда пользователь щелкает мышью по левой кнопке мыши.

Здесь шаблон меню для контекстного меню, который дается в файле определения ресурса прикладной программы.

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, uMsg, wParam, lParam)
HWND hwnd;
UINT uMsg;
WPARAM wParam;
LPARAM lParam;
{
RECT rc;// рабочая область
POINT pt;// место щелчка мыши
switch (uMsg) {
case WM_LBUTTONDOWN:
// Получим ограничительный прямоугольник рабочей области.
GetClientRect(hwnd, (LPRECT) &rc);
// Получим рабочие координаты щелчка мыши.
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
// Если щелчок клавишей мыши произошел
// внутри рабочей области, выполните определяемую
// программой функцию, которая показывает на
// экране контекстное меню.

if (PtInRect((LPRECT) &rc, pt))
HandlePopupMenu(hwnd, pt);
break;
.
. // Обработка других сообщений окна.
.

default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return NULL;
}

VOID APIENTRY HandlePopupMenu(hwnd, pt)
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);
}
 
« Предыдущая статья   Следующая статья »