Spracovaním správy WM_CONTEXTMENU

WM_CONTEXTMENU správa je generovaná vtedy, keď pri podávaní žiadosti okno prechádza WM_RBUTTONUP alebo WM_NCRBUTTONUP správu funkciu DefWindowProc . Uplatňovanie dokáže spracovať toto hlásenie zobraziť kontextovú ponuku vhodných na určitú časť svojej obrazovke. Ak žiadosť nie zobraziť kontextovú ponuku, to by malo prejsť správy na DefWindowProc pre predvolené manipuláciu.

Toto je príklad WM_CONTEXTMENU správu spracovania ako môže zobrazovať v okne postup podávania žiadostí. Nízka-order a Rozdeli ints parametrom lParam zadať obrazovke súradnice myši pri pravé tlačidlo myši uvoľnené (Všimnite si, že tieto súradnice môže trvať záporné hodnoty v systémoch s viacerými monitormi). Definovanom aplikáciou OnContextMenu funkcia vracia TRUE, ak sa zobrazí kontextová ponuka alebo NEPRAVDIVÉ, ak nie je.

prípad WM_CONTEXTMENU: if (!OnContextMenu (hwnd, GET_X_LPARAM(lParam),
              GET_Y_LPARAM(lParam))) návrat DefWindowProc (hwnd, uMsg, wParam, lParam); 
    prestávka 
 

Nasledujúca funkcia definovanom aplikáciou OnContextMenu zobrazí sa kontextová ponuka ak zadané myši polohy v rámci oblasti okna klienta. Sofistikovanejšie funkcie môže zobraziť jednu z niekoľkých rôznych jedál, v závislosti na časť, ktorej sa klient je špecifikovaná oblasť. Skutočne kontextovú ponuku zobrazíte v tomto príklade si vyžaduje definovanom aplikáciou funkciu nazýva DisplayContextMenu. Popis tejto funkcie nájdete v časti zobrazenie kontextovej ponuke.

BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y) {RECT rc;                    / / klientskej oblasti okna bod pt = {x a y};        / / umiestnenie myši kliknite / / získať ohraničovacieho rámčeka do klientskej oblasti. 
 
    GetClientRect (hwnd, amp, rc); 
 
    / / Konvertovať pozície myši na klienta súradnice. 
 
    ScreenToClient (hwnd & pt); 
 
    / / Ak sa stanovisko do klientskej oblasti, zobraziť / / kontextovú ponuku. 
 
    Ak (PtInRect (& rc, pt)) {ClientToScreen (hwnd & pt); 
        DisplayContextMenu (hwnd, pt); 
        Vráti hodnotu pravda; 
    } / / Vráti FALSE, ak žiadna ponuka je zobrazený. 
 
    Vráti FALSE; 
} 
 

Index