Elaborazione del messaggio WM_CONTEXTMENU

Il messaggio WM_CONTEXTMENU viene generato quando la routine della finestra di un'applicazione passa il messaggio WM_RBUTTONUP o WM_NCRBUTTONUP alla funzione DefWindowProc . L'applicazione può elaborare questo messaggio per visualizzare un menu di scelta rapida appropriato per una parte specifica del suo schermo. Se l'applicazione non viene visualizzato un menu di scelta rapida, dovrebbe passare il messaggio a DefWindowProc per gestione predefinita.

Di seguito è riportato un esempio di messaggio WM_CONTEXTMENU elaborazione di come potrebbe apparire nella routine della finestra di un'applicazione. L'ordine di bassa e l'alta ints del parametro lParam specificano le coordinate dello schermo, del mouse quando il pulsante destro del mouse viene rilasciato (si noti che queste coordinate possono assumere valori negativi su sistemi con più monitor). La definiti dall'applicazione OnContextMenu funzione restituisce TRUE se esso viene visualizzato un menu di contesto, o falsa se non fa.

caso WM_CONTEXTMENU: if (!OnContextMenu (hwnd, GET_X_LPARAM(lParam),
              GET_Y_LPARAM(lParam))) restituire DefWindowProc (hwnd, uMsg, wParam, lParam); 
    pausa 
 

La seguente funzione OnContextMenu definiti dall'applicazione viene visualizzato un menu di scelta rapida, se la posizione del mouse specificato è nell'area client della finestra. Una funzione più sofisticata potrebbe visualizzare uno dei diversi menu diversi, a seconda di quale porzione del client viene specificata la zona. In realtà visualizzare menu di scelta rapida, questo esempio chiama una funzione definita dall'applicazione denominata DisplayContextMenu. Per una descrizione di questa funzione, vedere visualizzazione di un Menu di scelta rapida.

BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y) {RECT rc;                    / / area client della finestra punto pt = {x, y;}        / / posizione del mouse click / / ottiene il rettangolo di delimitazione dell'area client. 
 
    GetClientRect (hwnd, amp rc); 
 
    / / Convertire la posizione del mouse in coordinate del client. 
 
    ScreenToClient (hwnd & pt); 
 
    / / Display se la posizione è nell'area client, un / / menu di scelta rapida. 
 
    Se (PtInRect (& rc, pt)) {ClientToScreen (hwnd & pt); 
        DisplayContextMenu (hwnd, pt); 
        return TRUE; 
    } / / Return FALSE se nessun menu viene visualizzato. 
 
    return FALSE; 
} 
 

Rimedio: Inserire il CD-ROM CD di MSDN Library.

Index