Compartilhar via


Mensagem WM_POINTERUPDATE

Postado para fornecer uma atualização em um ponteiro que fez contato sobre a área do cliente de uma janela ou em um ponteiro não capturado pairando sobre a área do cliente de uma janela. Enquanto o ponteiro está focalizando, a mensagem tem como alvo qualquer janela em que o ponteiro esteja terminado. Enquanto o ponteiro está em contato com a superfície, o ponteiro é capturado implicitamente para a janela sobre a qual o ponteiro fez contato, e essa janela continua a receber entrada para o ponteiro até que ele interrompa o contato.

![Importante]
Os aplicativos da área de trabalho devem estar cientes do DPI. Se seu aplicativo não estiver ciente do DPI, as coordenadas de tela contidas em mensagens de ponteiro e estruturas relacionadas poderão parecer imprecisas devido à virtualização de DPI. A virtualização de DPI fornece suporte de dimensionamento automático para aplicativos que não têm reconhecimento de DPI e estão ativos por padrão (os usuários podem desativá-lo). Para obter mais informações, confira Escrevendo aplicativos Win32 de Alto DPI.

#define WM_POINTERUPDATE              0x0245

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 do ponteiro.

  • IS_POINTER_NEW_WPARAM(wParam): um sinalizador que indica se essa mensagem representa a primeira entrada gerada por um novo ponteiro.

  • IS_POINTER_INRANGE_WPARAM(wParam): um sinalizador que indica se essa mensagem foi gerada por um ponteiro durante sua vida útil. Esse sinalizador não é definido em mensagens que indicam que o ponteiro deixou o intervalo de detecção

  • IS_POINTER_INCONTACT_WPARAM(wParam): um sinalizador que indica se essa mensagem foi gerada por um ponteiro que está em contato com a superfície da janela. Esse sinalizador não é definido em mensagens que indicam um ponteiro pairando.

  • 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.

    • Isso é análogo a um botão esquerdo do mouse 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.

    • Isso é análogo a um botão direito do mouse para baixo.
    • Um ponteiro de caneta terá esse conjunto quando estiver em contato com a superfície do digitalizador com o botão do cano da caneta pressionado.
  • IS_POINTER_THIRDBUTTON_WPARAM(wParam): um sinalizador que indica se há uma ou mais ações terciárias com base no tipo de ponteiro; Por exemplo, um aplicativo pode determinar os estados dos botões de uma caneta chamando GetPointerPenInfo e examinando os sinalizadores que especificam os estados do botão.

  • IS_POINTER_FOURTHBUTTON_WPARAM(wParam): um sinalizador que indica se o ponteiro especificado tomou a quarta ação. Os aplicativos que desejam responder à quarta ação devem recuperar informações específicas do tipo de ponteiro para determinar se o primeiro botão estendido do mouse (XButton1) está pressionado.

  • IS_POINTER_FIFTHBUTTON_WPARAM(wParam): um sinalizador que indica se o ponteiro especificado executou a quinta ação. Os aplicativos que desejam responder à quinta ação devem recuperar informações específicas do tipo de ponteiro para determinar se o segundo botão estendido do mouse (XButton2) está pressionado.

    Consulte 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 do botão.

lParam

Contém a localização 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 mais complexa do ponteiro. Sempre que possível, um aplicativo deve usar as informações completas da área do ponteiro em vez da localização do ponto.

Utilize as seguintes macros para obter as coordenadas físicas da tela do ponto.

Valor retornado

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

Se o aplicativo não processar essa mensagem, ele deverá chamar DefWindowProc.

Comentários

Cada ponteiro tem um identificador de ponteiro exclusivo durante sua vida útil. A vida útil de um ponteiro começa quando ele é detectado pela primeira vez.

Uma mensagem WM_POINTERENTER é gerada se um ponteiro pairado for detectado. Uma mensagem de WM_POINTERDOWN seguida de uma mensagem de WM_POINTERENTER é gerada se um ponteiro sem foco for detectado.

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 detectado. Isso gera uma mensagem WM_POINTERLEAVE .

Quando um ponteiro é abortado, 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:

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

A macro MAKEPOINTS também pode ser usada para converter o parâmetro lParam em uma estrutura POINTS.

A função GetKeyState pode ser usada para determinar os estados de chave do modificador de teclado associados a essa mensagem. Por exemplo, para detectar que a tecla ALT foi pressionada, verifique se GetKeyState (VK_MENU) < 0.

Se o aplicativo não processar essa mensagem, DefWindowProc pode gerar uma ou mais mensagens WM_GESTURE se a sequência de entrada deste e, possivelmente, outros ponteiros é reconhecida como um gesto. Se um gesto não for reconhecido, DefWindowProc pode gerar entrada do mouse.

Se um aplicativo consome seletivamente alguma entrada de ponteiro e passa o restante para DefWindowProc, o comportamento resultante é indefinido.

Use a função GetPointerInfo para recuperar mais informações relacionadas a essa mensagem.

Se o aplicativo não processar essas mensagens tão rápido quanto elas são geradas, algumas movimentações podem ser aglutinadas. O histórico de entradas que foram aglutinadas nesta mensagem pode ser recuperado usando a função GetPointerInfoHistory.

Exemplos

O exemplo de código a seguir mostra como usar GET_X_LPARAM, GET_Y_LPARAM, IS_POINTER_FIRSTBUTTON_WPARAM e IS_POINTER_SECONDBUTTON_WPARAM para recuperar informações relevantes dos parâmetros wParam e lParam da mensagem WM_POINTERUPDATE.

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

if (IS_POINTER_PRIMARYBUTTON_WPARAM(wParam))
{
    // process pointer move while down, similar to mouse move with left button down
}
else if (IS_POINTER_SECONDARYBUTTON_WPARAM(wParam))
{
    // process pointer move while down, similar to mouse move with right button down
}

O exemplo de código a seguir mostra como usar GET_POINTERID_WPARAM para recuperar a ID do ponteiro do parâmetro wParam da mensagem WM_POINTERUPDATE .

POINTER_INFO pointerInfo;
UINT32       pointerId = GET_POINTERID_WPARAM(wParam);

// Retrieve common pointer information
if (!GetPointerInfo(pointerId, &amp;pointerInfo))
{
    // failure, call GetLastError()
}
else
{
    // success, process pointerInfo
}

O exemplo de código a seguir mostra como manipular diferentes tipos de ponteiro.

POINTER_TOUCH_INFO   touchInfo;
POINTER_PEN_INFO     penInfo;
POINTER_INFO pointerInfo;
UINT32       pointerId = GET_POINTERID_WPARAM(wParam);
POINTER_INPUT_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 = HandleGenericPointerInfo(&pointerInfo);
    }
    break;
}

Requisitos

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

Confira também

Mensagens

Referência

Sinalizadores de ponteiro

GET_POINTERID_WPARAM

IS_POINTER_NEW_WPARAM

IS_POINTER_INRANGE_WPARAM

IS_POINTER_INCONTACT_WPARAM

IS_POINTER_PRIMARY_WPARAM

IS_POINTER_FIRSTBUTTON_WPARAM

IS_POINTER_SECONDBUTTON_WPARAM

IS_POINTER_THIRDBUTTON_WPARAM

IS_POINTER_FOURTHBUTTON_WPARAM

IS_POINTER_FIFTHBUTTON_WPARAM