Создание контекстное меню атрибутов шрифтов

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

Ниже приведен шаблон меню в контекстном меню, которое содержится в файле определения ресурса приложения.

PopupMenu меню начать POPUP «Манекен Popup» начало контекстного меню «Шрифты» начать MENUITEM «Курьер», IDM_FONT_COURIER MENUITEM «Раз Роман», IDM_FONT_TMSRMN MENUITEM «Swiss», IDM_FONT_SWISS MENUITEM «Helvetica», IDM_FONT_HELV MENUITEM «Старый Английский», IDM_FONT_OLDENG конец POPUP «Размеры» начать 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 конец контекстного меню «Стили» начать MENUITEM «полужирный», IDM_STYLE_BOLD MENUITEM «Курсив», IDM_STYLE_ITALIC MENUITEM «вычеркнуть», IDM_STYLE_SO MENUITEM «Надстрочный индекс», IDM_STYLE_SUPER MENUITEM «Подстрочный индекс», IDM_STYLE_SUB конец конец конец 
 

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

 LRESULT APIENTRY MenuWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {RECT РК;    / / Клиент области точки pt;   / / расположение мыши нажмите переключатель (uMsg) {, дело WM_LBUTTONDOWN: / / получить прямоугольник, ограничивающий часть клиентской области. 
 
            GetClientRect (hwnd, amp (LPRECT) rc); 
 
            / / Получить координаты клиента для щелчка мыши.  
 
            PT.x = GET_X_LPARAM(lParam); 
            PT.y = GET_Y_LPARAM(lParam); 
 
            / / Если щелчок мыши имели место внутри клиента / / области, выполнить определенную приложением функцию / / что отображает контекстное меню. 
 
            Если (PtInRect((LPRECT) & rc, pt)) HandlePopupMenu (hwnd, пт); 
            перерыв; 
        / / Процесс других оконных сообщений.  
 
        по умолчанию: возвращение DefWindowProc (hwnd, uMsg, wParam, lParam); 
    } Возвращает значение NULL; 
} VOID APIENTRY HandlePopupMenu(HWND hwnd, POINT pt) {HMENU hmenu;            / / меню Шаблон HMENU hmenuTrackPopup;  / / контекстное меню / / Загрузить меню шаблон, содержащий контекстное меню от / / ресурсы приложения. 
 
    HMenu = LoadMenu (hinst, «PopupMenu»); 
    Если (hmenu == NULL) возвращение; 
 
    / / Получить первый контекстное меню в меню шаблона. Это / / меню отображается этот 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); 
} 
 

Index