Обработка сообщения WM_CONTEXTMENU

WM_CONTEXTMENU сообщение появляется, когда процедура окна приложения функции DefWindowProc передается сообщение WM_RBUTTONUP или WM_NCRBUTTONUP . Приложение может обработать это сообщение для отображения контекстного меню, соответствующие конкретным часть его экрана. Если приложение не отображает контекстное меню, он должен передать сообщение DefWindowProc для обработки по умолчанию.

Ниже приведен пример обработки сообщений WM_CONTEXTMENU, как она может выглядеть в процедуре окна приложения. Младший и высокого порядка ints параметра lParam указать координаты мыши когда правой кнопкой мыши на экране выпущен (Обратите внимание, что эти координаты может принимать отрицательных значений на системах с несколькими мониторами). Определяемый приложением OnContextMenu функция возвращает значение TRUE, если отображается контекстное меню, или значение FALSE, если это не.

дело WM_CONTEXTMENU: если (!OnContextMenu (hwnd, GET_X_LPARAM(lParam),
              GET_Y_LPARAM(lparam))) возвращение DefWindowProc (hwnd, uMsg, wParam, lParam); 
    перерыв 
 

Следующая функция определяется приложением OnContextMenu выводит контекстное меню, если указанное мыши позиция находится в пределах клиентской области окна. Более сложные функции могут отображаться один из нескольких различных меню, в зависимости от какой части клиента указывается область. На самом деле отображения контекстного меню, этот пример вызывает определенные приложением функцию под названием DisplayContextMenu. Описание этой функции содержатся в разделе Отображение контекстного меню.

BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y) {RECT РК;                    / / клиентскую область окна точки pt = {x, y};        / / Нажмите расположение мыши / / получить прямоугольник, ограничивающий часть клиентской области. 
 
    GetClientRect (hwnd, amp rc); 
 
    / / Преобразования положением указателя мыши в клиентских координатах. 
 
    ScreenToClient (hwnd и pt); 
 
    / / Если позиция находится в клиентской области, дисплей / / контекстное меню. 
 
    Если (PtInRect (& rc, pt)) {ClientToScreen (hwnd и pt); 
        DisplayContextMenu (hwnd, пт); 
        Возвращает значение TRUE; 
    } / / Вернуть значение FALSE, если меню не отображается. 
 
    вернуть значение FALSE; 
} 
 

Index