Prelucrarea mesaj WM_CONTEXTMENU

Mesajul WM_CONTEXTMENU este generat atunci când o cerere fereastra procedură trece mesajul WM_RBUTTONUP sau WM_NCRBUTTONUP la funcția de DefWindowProc . Cererea poate procesa acest mesaj pentru a afișa un meniu de comenzi rapide corespunzătoare la o por?iune specifice de său ecran. Dacă cererea nu se afișează un meniu de comenzi rapide, acesta ar trebui să treacă mesajul a DefWindowProc pentru manipularea implicit.

Următoarele este un exemplu de WM_CONTEXTMENU mesaj prelucrare așa cum ar putea apărea într-o cerere fereastra procedură. Low-ordine și high-ordine ints parametru lParam specifica coordonatele ecran mouse-ul atunci când butonul mouse-ului este lansat (Rețineți că aceste coordonate să adopte valori negative pe sisteme cu mai multe monitoare). Definite de aplicarea OnContextMenu funcție întoarce TRUE dacă se afișează un meniu contextual, sau FALSE dacă nu.

wM_CONTEXTMENU de caz: dacă (!OnContextMenu (hwnd, GET_X_LPARAM(lParam),
              GET_Y_LPARAM(lParam))) return DefWindowProc (hwnd, uMsg, wParam, lParam); 
    pauză 

 

Următoarele aplicarea OnContextMenu funcția definită afișează un meniu de comenzi rapide dacă mouse-ul specificat este în zone a ferestrei client. O funcție mai sofisticate ar putea afișa una dintre mai multe meniuri diferite, în funcție de pe care parte a clientului este specificată zona. Pentru a afișa de fapt din meniul de comenzi rapide, acest exemplu solicită o funcție definită de aplicarea numit DisplayContextMenu. Pentru o descriere de această funcție, consultați afișarea unui meniu de comenzi rapide.

BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y) {RECT rc;                    / / zonă client din fereastra punctul pt = {x, y};        / / Poziția mausului, faceți clic pe / / Get dreptunghiului de încadrare din zona de client. 
 
    GetClientRect (hwnd, amp rc); 
 
    / / Converti pozi?ia mouse-ul la client coordonate. 
 
    ScreenToClient (hwnd, & pt); 
 
    / / Dacă este în zona de client, afișați o / / meniul de comenzi rapide. 
 
    Dacă (PtInRect (& rc, pt)) {ClientToScreen (hwnd, & pt); 
        DisplayContextMenu (hwnd, pt); 
        întoarce TRUE; 
    } / / Return FALSE dacă este afișat nici un meniu. 
 
    return FALSE; 
} 

 

Index