Partilhar via


Mensagem WM_MOUSEWHEEL

Enviada para a janela de foco quando o botão de rolagem do mouse é girado. A função DefWindowProc propaga a mensagem para o pai da janela. Não deve haver encaminhamento interno da mensagem, pois DefWindowProc a propaga até encontrar uma janela que a processe.

Uma janela recebe essa mensagem por meio da sua função WindowProc.

#define WM_MOUSEWHEEL                   0x020A

Parâmetros

wParam

A palavra de ordem superior indica a distância em que a roda é girada, expressa em múltiplos ou divisões de WHEEL_DELTA, que é definido como 120. Um valor positivo indica que a roda foi girada para a frente; na direção oposta do usuário; um valor negativo indica que a roda foi girada para trás, na direção do usuário.

A palavra de ordem inferior indica se várias chaves virtuais estão pressionadas. Esse parâmetro pode usar um dos valores a seguir.

Valor Significado
MK_CONTROL
0x0008
A tecla CTRL está pressionada.
MK_LBUTTON
0x0001
O botão esquerdo do mouse está pressionado.
MK_MBUTTON
0x0010
O botão do meio do mouse está pressionado.
MK_RBUTTON
0x0002
O botão direito do mouse está pressionado.
MK_SHIFT
0x0004
A tecla SHIFT está pressionada.
MK_XBUTTON1
0x0020
O primeiro botão X está pressionado.
MK_XBUTTON2
0x0040
O segundo botão X está pressionado.

lParam

A palavra de ordem inferior especifica a coordenada x do ponteiro, em relação ao canto superior esquerdo da tela.

A palavra de ordem superior especifica a coordenada y do ponteiro, em relação ao canto superior esquerdo da tela.

Valor retornado

Se um aplicativo processar essa mensagem, ela deverá retornar zero.

Comentários

Use o código a seguir para obter as informações contidas no parâmetro wParam:

fwKeys = GET_KEYSTATE_WPARAM(wParam);
zDelta = GET_WHEEL_DELTA_WPARAM(wParam);

Use o seguinte código para obter a posição horizontal e vertical:

xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam); 

Conforme observado acima, a coordenada x está na ordem inferior curto do valor retornado; a coordenada y está na ordem superior curto (ambos representam valores assinados, porque podem usar valores negativos em sistemas com vários monitores). Se o valor retornado for atribuído a uma variável, você poderá usar a macro MAKEPOINTS para obter uma estrutura POINTS do valor retornado. Você também pode usar a macro GET_X_LPARAM ou GET_Y_LPARAM para extrair a coordenada X ou Y.

Importante

Não use as macros LOWORD ou HIWORD para extrair as coordenadas x e y da posição do cursor, porque essas macros retornam resultados incorretos em sistemas com vários monitores. Sistemas com vários monitores podem ter coordenadas x e y negativas, e LOWORD e HIWORD tratam as coordenadas como quantidades sem sinal.

A rotação da roda será um múltiplo de WHEEL_DELTA, que é definido como 120. Esse valor é o limite para uma ação a ser executada e uma dessas ações (por exemplo, rolagem de um incremento) deve ocorrer para cada delta.

O delta foi definido como 120 para permitir que a Microsoft ou outros fornecedores criem rodas com resolução mais detalhada (uma roda de rotação livre e sem entalhes) para enviar mais mensagens por rotação, mas com um valor menor em cada mensagem. Para usar esse recurso, adicione os valores delta recebidos até que WHEEL_DELTA seja alcançado (então, para uma rotação delta você obtém a mesma resposta) ou role linhas parciais em resposta a mensagens mais frequentes. Você também pode escolher uma granularidade de rolagem e acumular deltas até ser alcançado.

Observe que não há fwKeys para MSH_MOUSEWHEEL. Caso contrário, os parâmetros são exatamente iguais aos de WM_MOUSEWHEEL.

Cabe ao aplicativo encaminhar MSH_MOUSEWHEEL para quaisquer objetos ou controles inseridos. O aplicativo é necessário para enviar a mensagem a um aplicativo OLE inserido ativo. É opcional que o aplicativo o envie para um controle habilitado para roda com foco. Se o aplicativo enviar a mensagem para um controle, ele poderá marcar o valor retornado para ver se a mensagem foi processada. Os controles serão necessários para retornar um valor TRUE, se eles processarem a mensagem.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows 2000 Professional [somente aplicativos para desktop]
Servidor mínimo com suporte
Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho
Winuser.h (inclui Windowsx.h)

Confira também

Referência

GET_KEYSTATE_WPARAM

GET_X_LPARAM

GET_Y_LPARAM

GET_WHEEL_DELTA_WPARAM

HIWORD

LOWORD

mouse_event

Conceitual

Entrada por mouse

Outros recursos

GetSystemMetrics

MAKEPOINTS

POINTS

SystemParametersInfo