Verarbeitung der WM_CONTEXTMENU-Meldung

Die WM_CONTEXTMENU -Meldung wird generiert, wenn eine Anwendung Fensterprozedur die Nachricht WM_RBUTTONUP oder WM_NCRBUTTONUP an die DefWindowProc -Funktion übergibt. Die Anwendung kann diese Nachricht zur Anzeige eines Kontextmenüs auf einen bestimmten Teil der ihren Bildschirm geeignete verarbeiten. Wenn die Anwendung ein Kontextmenü nicht angezeigt wird, sollten sie die Nachricht DefWindowProc für Standardbehandlung übergeben.

Im folgenden ist ein Beispiel für WM_CONTEXTMENU Nachricht verarbeitet, wie es in einer Anwendung Fensterprozedur erscheinen mag. Die niederwertigen und höherwertigen Ints von den lParam -Parameter angeben, dass die Bildschirmkoordinaten der Maus wenn die Rechte Maustaste ist freigegeben (Beachten Sie, dass diese Koordinaten negative Werte auf Systemen mit mehreren Monitoren verwenden können). Die anwendungsdefinierte OnContextMenu-Funktion gibt TRUE, wenn ein Kontextmenü angezeigt, oder FALSE, wenn dies nicht der Fall.

fall WM_CONTEXTMENU: If (!OnContextMenu (Hwnd, GET_X_LPARAM(lParam),
              GET_Y_LPARAM(lParam))) return DefWindowProc (Hwnd, uMsg, wParam, lParam); 
    Pause 

 

Die folgende Anwendung definierte OnContextMenu-Funktion wird ein Kontextmenü angezeigt, wenn die angegebenen Mausposition im Clientbereich des Fensters ist. Eine komplexere Funktion möglicherweise eine verschiedene Wahlmenüs, angezeigt, je nachdem welcher Teil des Clients Bereich angegeben wird. Um tatsächlich im Kontextmenü anzuzeigen, ruft in diesem Beispiel wird eine anwendungsdefinierte Funktion, die als DisplayContextMenu bezeichnet. Eine Beschreibung dieser Funktion finden Sie unter Anzeigen eines Kontextmenüs.

BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y) {RECT rc;                    / / Client-Bereich des Fensters POINT pt = {X, y};        / / Position der Maus klicken Sie auf / / Get das umschließende Rechteck des Clientbereichs. 
 
    GetClientRect (Hwnd, Amp, rc); 
 
    / / Die Position des Mauszeigers in Clientkoordinaten konvertieren. 
 
    ScreenToClient (Hwnd, & pt); 
 
    / / Wenn die Position im Clientbereich ist, zeigen ein / / im Kontextmenü. 
 
    Wenn (PtInRect (& Rc, pt)) {ClientToScreen (Hwnd, & pt); 
        DisplayContextMenu (Hwnd, pt); 
        TRUE zurück; 
    } / / FALSE zurück, wenn kein Menü angezeigt wird. 
 
    Return FALSE; 
} 

 

Index