Verwerken van de berichten van WM_CONTEXTMENU

De WM_CONTEXTMENU bericht wordt gegenereerd wanneer een toepassing venster procedure WM_RBUTTONUP of WM_NCRBUTTONUP aan wordt doorgegeven de DefWindowProc functie. De toepassing kan verwerken dit bericht als een snelmenu passende naar een bepaald gedeelte van het scherm wilt weergeven. Als de toepassing een snelmenu niet wordt weergegeven, moet het de boodschap doorgeven aan DefWindowProc voor standaard behandeling.

Hier volgt een voorbeeld van het WM_CONTEXTMENU bericht verwerken als het lijkt in het venster van een aanvraagprocedure. De lage-orde en eersterangs ints van de lParam parameter opgeven de schermco÷rdinaten van de muis wanneer de rechter muisknop is uitgebracht (merk op dat deze co÷rdinaten negatieve waarden op systemen met meerdere beeldschermen nemen kunnen). De toepassing gedefinieerde OnContextMenu functie retourneert TRUE als een contextmenu wordt weergegeven, of FALSE als dit niet het geval.

case WM_CONTEXTMENU: if (!OnContextMenu (hwnd, GET_X_LPARAM(lParam),
              GET_Y_LPARAM(lParam))) return DefWindowProc (hwnd, uMsg, wParam, lParam); 
    pauze 
 

De volgende toepassing gedefinieerde OnContextMenu functie wordt een snelmenu weergegeven als de opgegeven muispositie binnen het clientgebied van het venster. Een meer geavanceerde functie zou weergeven een van verscheidene verschillende menu's, afhankelijk van welk deel van de client gebied is opgegeven. Aan eigenlijk het snelmenu weergeven, wordt in dit voorbeeld een toepassing gedefinieerde functie genaamd DisplayContextMenu. Zie voor een beschrijving van deze functie, een snelmenu weergeven.

BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y) {RECT rc;                    / / clientgebied van het venster punt pt = {x, y};        / / locatie van muis klik / / Get de rechthoek van het clientgebied. 
 
    GetClientRect (hwnd, amp; rc); 
 
    / / De muispositie converteren naar client co÷rdinaten. 
 
    ScreenToClient (hwnd, & pt); 
 
    / / Als de positie in het clientgebied, display een / / snelmenu. 
 
    Als (PtInRect (& rc, pt)) {ClientToScreen (hwnd, & pt); 
        DisplayContextMenu (hwnd, pt); 
        return TRUE; 
    } / / FALSE als resultaat als er geen menu wordt weergegeven. 
 
    Return FALSE; 
} 
 

Index