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

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

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

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); 
} 

 

Назад в оглавление
На главную страницу

Hosted by uCoz