Przetwarzanie wiadomości WM_CONTEXTMENU

Komunikat WM_CONTEXTMENU jest generowany, kiedy procedurę okna aplikacji przekazuje wiadomość WM_RBUTTONUP lub WM_NCRBUTTONUP do funkcji DefWindowProc . Aplikacja może przetwarzać ten komunikat, aby wyświetlić menu skrótów właściwe do określonej części swojego ekranu. Jeśli aplikacja nie wyświetla menu skrótów, to należy przekazać wiadomość do DefWindowProc domyślnej.

Poniżej podano przykład WM_CONTEXTMENU wiadomości przetwarzania, jak może wyglądać w procedurę okna aplikacji. S bity i wysokich numerach intparametru fikcyjnymi określić, że współrzędne ekranu myszy po kliknięciu prawym przyciskiem myszy wydany (należy zauważyć, że te współrzędne może przyjmować wartości ujemne w systemach z wielu monitorów). Zdefiniowane przez aplikację OnContextMenu funkcja zwraca wartość TRUE, jeśli wyświetla menu kontekstowe, lub FAŁSZ, jeśli nie.

sprawa WM_CONTEXTMENU: if (!OnContextMenu (hwnd, GET_X_LPARAM(lParam),
              GET_Y_LPARAM(lParam))) zwraca DefWindowProc (hwnd, uMsg, wParam, fikcyjnymi); 
    podział 

 

Następująca funkcja OnContextMenu zdefiniowanych przez aplikację pojawi się menu podręczne, jeżeli pozycja myszy określony jest w obrębie obszaru okna klienta. Bardziej zaawansowana funkcja może być wyświetlany jeden z kilku różnych menu, w zależności od tego, która część klienta jest określony obszar. Aby faktycznie wyświetlić menu skrótów, w tym przykładzie wywoła funkcję zdefiniowanych przez aplikację o nazwie DisplayContextMenu. Opis tej funkcji zobacz Wyświetlanie Menu skrótów.

BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y) {RECT rc;                    / / obszaru klienckiego okna Punkt pt = {x, y};        / / Lokalizacja myszy kliknij / / Get prostokąta obwiedni obszaru klienckiego. 
 
    GetClientRect (hwnd, amp; rc); 
 
    / / Convert pozycję mysz do współrzędnych klienta. 
 
    ScreenToClient (hwnd & pt); 
 
    / / Jeżeli pozycja znajduje się w obszarze klienta, / / menu skrótów. 
 
    Jeżeli (PtInRect (& rc, pt)) {ClientToScreen (hwnd & pt); 
        DisplayContextMenu (hwnd, pt); 
        Zwraca wartość PRAWDA; 
    } / / Zwraca FALSE, jeśli menu nie jest wyświetlana. 
 
    return FALSE; 
} 

 

Index