Processar a mensagem WM_CONTEXTMENU

A WM_CONTEXTMENU mensagem é gerada quando o procedimento de janela de um aplicativo passa a mensagem WM_RBUTTONUP ou WM_NCRBUTTONUP para o DefWindowProc função. O aplicativo pode Processoar esta mensagem para exibir um menu de atalho apropriado para uma parte específica da sua tela. Se o aplicativo não exibe um menu de atalho, ele deve transmitir a mensagem para DefWindowProc para manipulação usar como padrão.

A seguir é um exemplo de WM_CONTEXTMENU mensagem processamento como pode aparecer no procedimento de janela do aplicativo. A baixa-ordem e alto-ordem ints da lParam parâmetro especificar as coordenadas de tela do mouse quando o botão direito do mouse é liberado (Observe que essas coordenadas podem tomar valores negativos em sistemas com múltiplo monitores). A application-defined OnContextMenu função retorna TRUE se ele exibe um menu de contexto, ou FALSE se ele não.

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

 

A seguinte função OnContextMenu definido pelo aplicativo exibe um menu de atalho se a posição do mouse especificado é dentro de área cliente da janela. Uma função mais sofisticada pode exibir um dos vários menus diferentes, dependendo de qual parte do cliente de área é especificada. Para realmente exibir o menu de atalho, este exemplo chama uma função definida pelo aplicativo chamada DisplayContextMenu. Para obter uma descrição desta função, consulte Exibir um Menu de atalho.

BOOL WINAPI OnContextMenu(HWND hwnd, int x, int y) {RECT rc;                    / / área cliente da janela ponto pt = {x, y};        / / local do mouse clique / / Get o retângulo delimitador da área cliente. 
 
    GetClientRect (hwnd, amp, rc); 
 
    / / Converter a posição do mouse em coordenadas do cliente. 
 
    ScreenToClient (hwnd e pt); 
 
    / / Se a posição é na área de cliente, exibir uma / / menu de atalho. 
 
    se (PtInRect (& rc, pt)) {ClientToScreen (hwnd e pt); 
        DisplayContextMenu (hwnd, pt); 
        retornar TRUE; 
    } / / Return FALSE se nenhum menu for exibido. 
 
    retornar FALSE; 
} 

 

Index