Обробка повідомлення WM_CONTEXTMENU

WM_CONTEXTMENU повідомлення генерується, коли процедура вікно додатка передає повідомлення WM_RBUTTONUP або WM_NCRBUTTONUP DefWindowProc функції. Застосунок може обробити це повідомлення для відображення контекстного меню відповідає певна частина його екрані. Якщо застосунок не відображає контекстне меню, він повинен передати повідомлення 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 rc;                    / / клієнтської області вікна ТОЧКИ pt = {x, y};        / / розташування миші клацніть / / отримати обмежуючого прямокутника області клієнта. 
 
    GetClientRect (hwnd, amp rc); 
 
    / / Перетворення миші позиція клієнт координат. 
 
    ScreenToClient (hwnd & pt); 
 
    / / Якщо позиції в області клієнта, дисплей / / контекстного меню. 
 
    Якщо (PtInRect (& rc, pt)) {ClientToScreen (hwnd & pt); 
        DisplayContextMenu (hwnd, pt); 
        повертає TRUE; 
    } / / Повернути значення FALSE, якщо меню не відображається. 
 
    Повертає FALSE; 
} 

 

Index