Behandling av WM_CONTEXTMENU-melding

WM_CONTEXTMENU -melding genereres når et programs vindusprosedyre sender meldingen WM_RBUTTONUP eller WM_NCRBUTTONUP til DefWindowProc -funksjonen. Programmet kan behandle denne meldingen for å vise en hurtigmeny som passer til en bestemt del av sin skjermen. Hvis programmet ikke viser en hurtigmeny, skal det sende meldingen til DefWindowProc for standard håndtering.

Følgende er et eksempel på WM_CONTEXTMENU meldingen behandling etter hvert som det kan vises i et programs vindusprosedyre. Signifikante og signifikante int-s lParam -parameteren angir skjermkoordinater museklikk når høyre museknapp er utgitt (Merk at disse koordinatene kan ta negative verdier på systemer med flere skjermer). Programdefinert OnContextMenu-funksjonen returnerer SANN hvis den viser en kontekst-menyen, og USANN hvis den ikke.

case WM_CONTEXTMENU: Hvis (!OnContextMenu (hwnd, GET_X_LPARAM(lParam),
              GET_Y_LPARAM(lParam))) returnerer DefWindowProc (hwnd, uMsg, wParam, lParam); 
    pause 

 

En hurtigmeny viser følgende programdefinert OnContextMenu funksjonen hvis den angitte mus plasseringen er innenfor vinduets klientområdet. En mer avansert funksjon viser én av flere forskjellige menyer, avhengig av hvilken del av klienten området er angitt. Du vil faktisk vise hurtigmenyen, kaller dette eksemplet en programdefinert funksjon kalt DisplayContextMenu. En beskrivelse av denne funksjonen, kan du se vise en hurtigmeny.

BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y) {RECT rc;                    / / klientområdet for vinduet punkt pkt = {x, y};        / / klikker du plasseringen av musen / / få markeringsrammen rektanglet av klientområdet. 
 
    GetClientRect (hwnd, amp; rc); 
 
    / / Convert musen posisjonen til klient-koordinater. 
 
    ScreenToClient (hwnd, & pt); 
 
    / / Hvis plasseringen er i klientområdet, vise en / / hurtigmenyen. 
 
    Hvis (PtInRect (& rc, pt)) {ClientToScreen (hwnd, & pt); 
        DisplayContextMenu (hwnd, pt); 
        Returner verdien SANN; 
    } / / Returneres USANN hvis ingen meny. 
 
    Return FALSE; 
} 

 

Index