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

Приміром, у цьому розділі містить фрагменти коду з додатка, який створює та показує контекстне меню, що дозволяє користувачеві встановити шрифти та атрибути шрифту. Програма відображає меню в клієнтської області його головне вікно кожного разу, коли користувач натискає на ліву кнопку миші.

Ось меню шаблон для контекстне меню, яке надається у файл ресурсів визначення програми.

PopupMenu меню ПОЧАТИ СПЛИВАЮЧИХ "Пустишка меню" ПОЧАТИ спливаюче вікно "Шрифти" ПОЧАТИ MENUITEM "Кур'єр", IDM_FONT_COURIER MENUITEM "Рази Роман", IDM_FONT_TMSRMN MENUITEM "Швейцарський", IDM_FONT_SWISS MENUITEM "Гельветики", IDM_FONT_HELV елемент меню "Старий Англійська", IDM_FONT_OLDENG кінці меню "Розмір" ПОЧАТИ 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 "Bold", IDM_STYLE_BOLD елемент меню «Курсив», IDM_STYLE_ITALIC елемент меню «викреслити", IDM_STYLE_SO MENUITEM"Надіндекс", IDM_STYLE_SUPER MENUITEM"Підіндекс", IDM_STYLE_SUB кінці кінець кінця 

 

Наступний приклад дає вікно процедури та допоміжні функції використовуються для створення і контекстного меню.

 LRESULT APIENTRY MenuWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {RECT rc;    / / Клієнт області ТОЧКИ pt;   / / розташування миші клацніть перемикач (uMsg) {випадку WM_LBUTTONDOWN: / / отримати обмежуючого прямокутника області клієнта. 
 
            GetClientRect (hwnd, (LPRECT) amp rc); 
 
            / / Отримати клієнт координати для клацання мишею.  
 
            PT.x = GET_X_LPARAM(lParam); 
            PT.y = GET_Y_LPARAM(lParam); 
 
            / / Якщо кнопки миші відбулася всередині клієнт / / область, виконувати функцію визначений у застосунку / /, який відображає контекстне меню. 
 
            Якщо (PtInRect((LPRECT) & rc, pt)) HandlePopupMenu (hwnd, pt); 
            перерви; 
        / / Процес інші вікна повідомлення.  
 
        за замовчуванням: повернення 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