WM_POINTERUP mensagem
Publicado quando um ponteiro que fez contato sobre a área do cliente de uma janela quebra o contato. Esta mensagem de entrada tem como alvo a janela através da qual o ponteiro faz contato e o ponteiro é, nesse ponto, implicitamente capturado para a janela para que a janela continue a receber mensagens de entrada, incluindo a notificação de WM_POINTERUP para o ponteiro até que ele quebre o contato.
Uma janela recebe esta mensagem através da sua função WindowProc.
! [Importante]
As aplicações de ambiente de trabalho devem estar cientes do DPI. Se seu aplicativo não reconhece DPI, as coordenadas de tela contidas em mensagens de ponteiro e estruturas relacionadas podem parecer imprecisas devido à virtualização de DPI. A virtualização de DPI fornece suporte de dimensionamento automático para aplicativos que não reconhecem DPI e estão ativos por padrão (os usuários podem desativá-lo). Para obter mais informações, consulte escrevendo High-DPI aplicativos Win32.
#define WM_POINTERUP 0x0247
Parâmetros
-
wParam
-
Contém informações sobre o ponteiro. Use as macros a seguir para recuperar informações do parâmetro wParam.
GET_POINTERID_WPARAM(wParam): o identificador de ponteiro.
IS_POINTER_NEW_WPARAM(wParam): um sinalizador que indica se esta mensagem representa a primeira entrada gerada por um novo ponteiro.
IS_POINTER_INRANGE_WPARAM(wParam): um sinalizador que indica se esta mensagem foi gerada por um ponteiro durante o seu tempo de vida. Esse sinalizador não é definido em mensagens que indicam que o ponteiro deixou o intervalo de deteção
IS_POINTER_INCONTACT_WPARAM(wParam): um sinalizador que indica se esta mensagem foi gerada por um ponteiro que está em contacto com a superfície da janela. Esse sinalizador não é definido em mensagens que indicam um ponteiro de focalização.
IS_POINTER_PRIMARY_WPARAM(wParam): indica que este ponteiro foi designado como primário.
IS_POINTER_FIRSTBUTTON_WPARAM(wParam): um sinalizador que indica se há uma ação primária.
- Isto é análogo a um botão esquerdo do rato para baixo.
- Um ponteiro de toque terá esse conjunto quando estiver em contato com a superfície do digitalizador.
- Um ponteiro de caneta terá esse conjunto quando estiver em contato com a superfície do digitalizador sem botões pressionados.
IS_POINTER_SECONDBUTTON_WPARAM(wParam): um sinalizador que indica se há uma ação secundária.
- Isto é análogo a um botão direito do rato para baixo.
- Um ponteiro da caneta terá este conjunto quando estiver em contacto com a superfície do digitalizador com o botão do cano da caneta premido.
IS_POINTER_THIRDBUTTON_WPARAM(wParam): um sinalizador que indica se há uma ou mais ações terciárias com base no tipo de ponteiro; Os aplicativos que desejam responder a ações terciárias devem recuperar informações específicas do tipo de ponteiro para determinar quais botões terciários são pressionados. Por exemplo, um aplicativo pode determinar os estados dos botões de uma caneta chamando GetPointerPenInfo e examinando os sinalizadores que especificam os estados dos botões.
IS_POINTER_FOURTHBUTTON_WPARAM(wParam): um sinalizador que indica se o ponteiro especificado executou a quarta ação. Os aplicativos que desejam responder a quartas ações devem recuperar informações específicas do tipo de ponteiro para determinar se o primeiro botão estendido do mouse (XButton1) é pressionado.
IS_POINTER_FIFTHBUTTON_WPARAM(wParam): umsinalizador deque indica se o ponteiro especificado executou a quinta ação. Os aplicativos que desejam responder a quintas ações devem recuperar informações específicas do tipo de ponteiro para determinar se o segundo botão estendido do mouse (XButton2) é pressionado.
Consulte de sinalizadores de ponteiro para obter mais detalhes.
Observação
Um ponteiro pairando não tem nenhum dos sinalizadores de botão definidos. Isso é análogo a um movimento do mouse sem botões do mouse para baixo. Um aplicativo pode determinar os estados dos botões de uma caneta pairando, por exemplo, chamando GetPointerPenInfo e examinando os sinalizadores que especificam os estados dos botões.
-
lParam
-
Contém o local do ponto do ponteiro.
Observação
Como o ponteiro pode fazer contato com o dispositivo em uma área não trivial, essa localização do ponto pode ser uma simplificação de uma área de ponteiro mais complexa. Sempre que possível, um aplicativo deve usar as informações completas da área do ponteiro em vez da localização do ponto.
Use as macros a seguir para recuperar as coordenadas físicas da tela do ponto.
- GET_X_LPARAM(lParam): a coordenada x (ponto horizontal).
- GET_Y_LPARAM(lParam): a coordenada y (ponto vertical).
Valor de retorno
Se um aplicativo processar essa mensagem, ele deverá retornar zero.
Se o aplicativo não processar essa mensagem, ele deve chamar DefWindowProc.
Comentários
! [Importante]
Quando uma janela perde a captura de um ponteiro e recebe a notificação WM_POINTERCAPTURECHANGED, normalmente não receberá mais notificações. Por esse motivo, é importante que você não faça suposições com base em WM_POINTERDOWN/WM_POINTERUP ou notificações WM_POINTERENTER/WM_POINTERLEAVE uniformemente emparelhadas.
Cada ponteiro tem um identificador de ponteiro exclusivo durante sua vida útil. A vida útil de um ponteiro começa quando ele é detetado pela primeira vez.
Uma mensagem WM_POINTERENTER é gerada se um ponteiro de focalização for detetado. Uma mensagem WM_POINTERDOWN seguida por uma mensagem WM_POINTERENTER é gerada se um ponteiro não pairante for detetado.
Durante sua vida útil, um ponteiro pode gerar uma série de mensagens WM_POINTERUPDATE enquanto está pairando ou em contato.
A vida útil de um ponteiro termina quando ele não é mais detetado. Isso gera uma mensagem WM_POINTERLEAVE.
Quando um ponteiro é anulado, POINTER_FLAG_CANCELED é definido.
Uma mensagem WM_POINTERLEAVE também pode ser gerada quando um ponteiro não capturado se move para fora dos limites de uma janela.
Para obter a posição horizontal e vertical de um ponteiro, use o seguinte:
Use o seguinte código para obter a posição horizontal e vertical:
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
O macro MAKEPOINTS também pode ser usado para converter o parâmetro lParam em uma estruturaPOINTS.
A funçãoGetKeyStatepode ser usada para determinar os estados da chave modificadora de teclado associados a essa mensagem. Por exemplo, para detetar que a tecla ALT foi pressionada, verifique se GetKeyState(VK_MENU) < 0.
Se o aplicativo não processar essa mensagem, DefWindowProc poderá gerar uma ou mais mensagens WM_GESTUREse a sequência de entrada deste e, possivelmente, de outros ponteiros for reconhecida como um gesto. Se um gesto não for reconhecido, DefWindowProc pode gerar a entrada do mouse.
Se um aplicativo consome seletivamente alguma entrada de ponteiro e passa o restante para DefWindowProc , o comportamento resultante é indefinido.
Use o função GetPointerInfo para recuperar mais informações relacionadas a essa mensagem.
Exemplos
O exemplo de código a seguir mostra como recuperar a posição x e y do ponteiro associado a essa mensagem.
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
// process pointer up, similar to mouse button up
O exemplo de código a seguir mostra como obter a id do ponteiro associada a essa mensagem.
POINTER_INFO pointerInfo;
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
// Retrieve common pointer information
if (!GetPointerInfo(pointerId, &pointerInfo))
{
// failure, call GetLastError()
}
else
{
// success, process pointerInfo
}
O exemplo de código a seguir mostra como manipular diferentes tipos de ponteiro associados a essa mensagem.
POINTER_TOUCH_INFO touchInfo;
POINTER_PEN_INFO penInfo;
POINTER_INFO pointerInfo;
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
POINTER_TYPE pointerType = PT_POINTER;
// default to unhandled to enable call to DefWindowProc
fHandled = FALSE;
if (!GetPointerType(pointerId, &pointerType))
{
// failure, call GetLastError()
// set PT_POINTER to fall to default case below
pointerType = PT_POINTER;
}
switch (pointerType)
{
case PT_TOUCH:
// Retrieve touch information
if (!GetPointerTouchInfo(pointerId, &touchInfo))
{
// failure, call GetLastError()
}
else
{
// success, process touchInfo
// mark as handled to skip call to DefWindowProc
fHandled = TRUE;
}
break;
case PT_PEN:
// Retrieve pen information
if (!GetPointerPenInfo(pointerId, &penInfo))
{
// failure, call GetLastError()
}
else
{
// success, process penInfo
// mark as handled to skip call to DefWindowProc
fHandled = TRUE;
}
break;
default:
if (!GetPointerInfo(pointerId, &pointerInfo))
{
// failure.
}
else
{
// success, proceed with pointerInfo.
fHandled = HandleGenericPointerMessage(&pointerInfo);
}
break;
}
Requerimentos
Exigência | Valor |
---|---|
Cliente mínimo suportado |
Windows 8 [apenas aplicações de ambiente de trabalho] |
Servidor mínimo suportado |
Windows Server 2012 [apenas aplicações de ambiente de trabalho] |
Cabeçalho |
|
Ver também
-
de referência