Compartir a través de


mensaje de WM_POINTERUPDATE

Publicado para proporcionar una actualización en un puntero que hizo contacto sobre el área de cliente de una ventana o en un puntero sin capturar sobre el área de cliente de una ventana. Mientras el puntero mantiene el puntero, el mensaje tiene como destino la ventana en la que se sobrepone el puntero. Mientras el puntero está en contacto con la superficie, el puntero se captura implícitamente en la ventana en la que el puntero realizó contacto y esa ventana continúa recibiendo la entrada del puntero hasta que interrumpe el contacto.

! [Importante]
Las aplicaciones de escritorio deben tener en cuenta ppp. Si la aplicación no es compatible con PPP, las coordenadas de pantalla contenidas en los mensajes de puntero y las estructuras relacionadas pueden parecer inexactas debido a la virtualización de PPP. La virtualización de PPP proporciona compatibilidad de escalado automático con aplicaciones que no son compatibles con PPP y que están activas de forma predeterminada (los usuarios pueden desactivarla). Para obtener más información, vea Escritura de High-DPI Aplicaciones Win32.

#define WM_POINTERUPDATE              0x0245

Parámetros

wParam

Contiene información sobre el puntero. Use las macros siguientes para recuperar información del parámetro wParam.

  • GET_POINTERID_WPARAM(wParam): el identificador del puntero.

  • IS_POINTER_NEW_WPARAM(wParam): una marca que indica si este mensaje representa la primera entrada generada por un nuevo puntero.

  • IS_POINTER_INRANGE_WPARAM(wParam): una marca que indica si un puntero generó este mensaje durante su vigencia. Esta marca no está establecida en los mensajes que indican que el puntero tiene un intervalo de detección izquierdo.

  • IS_POINTER_INCONTACT_WPARAM(wParam): una marca que indica si un puntero que está en contacto con la superficie de la ventana generó este mensaje. Esta marca no está establecida en los mensajes que indican un puntero de desplazamiento.

  • IS_POINTER_PRIMARY_WPARAM(wParam): indica que este puntero se ha designado como principal.

  • IS_POINTER_FIRSTBUTTON_WPARAM(wParam): una marca que indica si hay una acción principal.

    • Esto es análogo a un botón izquierdo del mouse hacia abajo.
    • Un puntero táctil tendrá este conjunto cuando esté en contacto con la superficie del digitalizador.
    • Un puntero de lápiz tendrá este conjunto cuando esté en contacto con la superficie del digitalizador sin botones presionados.
  • IS_POINTER_SECONDBUTTON_WPARAM(wParam): una marca que indica si hay una acción secundaria.

    • Esto es análogo a un botón derecho del mouse hacia abajo.
    • Un puntero de lápiz tendrá este conjunto cuando esté en contacto con la superficie del digitalizador con el botón de barril del lápiz presionado.
  • IS_POINTER_THIRDBUTTON_WPARAM(wParam): una marca que indica si hay una o varias acciones terciarias basadas en el tipo de puntero; Las aplicaciones que desean responder a acciones terciarias deben recuperar información específica del tipo de puntero para determinar qué botones terciarios se presionan. Por ejemplo, una aplicación puede determinar los estados de botones de un lápiz llamando a GetPointerPenInfo y examinando las marcas que especifican estados de botón.

  • IS_POINTER_FOURTHBUTTON_WPARAM(wParam): una marca que indica si el puntero especificado realizó la cuarta acción. Las aplicaciones que quieran responder a cuartas acciones deben recuperar información específica del tipo de puntero para determinar si se presiona el primer botón extendido del mouse (XButton1).

  • IS_POINTER_FIFTHBUTTON_WPARAM(wParam): una marca de que indica si el puntero especificado realizó la quinta acción. Las aplicaciones que desean responder a quintas acciones deben recuperar información específica del tipo de puntero para determinar si se presiona el segundo botón extendido del mouse (XButton2).

    Consulte de marcas de puntero para obtener más información.

    Nota

    Un puntero que mantiene el mouse no tiene ninguna de las marcas de botón establecidas. Esto es análogo a un movimiento del mouse sin botones del mouse hacia abajo. Una aplicación puede determinar los estados de botones de un lápiz que mantiene el puntero, por ejemplo, llamando a GetPointerPenInfo y examinando las marcas que especifican estados de botón.

lParam

Contiene la ubicación de punto del puntero.

Nota

Dado que el puntero puede establecer contacto con el dispositivo sobre un área no trivial, esta ubicación de punto puede ser una simplificación de un área de puntero más compleja. Siempre que sea posible, una aplicación debe usar la información completa del área de puntero en lugar de la ubicación del punto.

Use las macros siguientes para recuperar las coordenadas de pantalla físicas del punto.

Valor devuelto

Si una aplicación procesa este mensaje, debe devolver cero.

Si la aplicación no procesa este mensaje, debe llamar a DefWindowProc.

Observaciones

Cada puntero tiene un identificador de puntero único durante su vigencia. La duración de un puntero comienza cuando se detecta por primera vez.

Se genera un WM_POINTERENTER mensaje si se detecta un puntero que mantiene el puntero. Se genera un mensaje WM_POINTERDOWN seguido de un mensaje de WM_POINTERENTER si se detecta un puntero sin mantener el puntero.

Durante su duración, un puntero puede generar una serie de mensajes de WM_POINTERUPDATE mientras mantiene el puntero o está en contacto.

La duración de un puntero finaliza cuando ya no se detecta. Esto genera un mensaje WM_POINTERLEAVE.

Cuando se anula un puntero, se establece POINTER_FLAG_CANCELED.

También se puede generar un mensaje de WM_POINTERLEAVE cuando un puntero no capturado se mueve fuera de los límites de una ventana.

Para obtener la posición horizontal y vertical de un puntero, use lo siguiente:

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

La macro MAKEPOINTS también se puede usar para convertir el parámetro lParam en una estructuraPOINTS de.

La funcióngetKeyStatese puede usar para determinar los estados de tecla modificador del teclado asociados a este mensaje. Por ejemplo, para detectar que se ha presionado la tecla ALT, compruebe si GetKeyState (VK_MENU) < 0.

Si la aplicación no procesa este mensaje, DefWindowProc puede generar uno o varios mensajes WM_GESTURE si la secuencia de entrada de este y, posiblemente, otros punteros se reconocen como un gesto. Si no se reconoce un gesto, DefWindowProc puede generar la entrada del mouse.

Si una aplicación consume de forma selectiva alguna entrada de puntero y pasa el resto a DefWindowProc, el comportamiento resultante no está definido.

Use la función GetPointerInfo para recuperar más información relacionada con este mensaje.

Si la aplicación no procesa estos mensajes tan rápido como se generan, algunos movimientos se pueden fusionar. El historial de entradas que se han combinado en este mensaje se puede recuperar mediante la función GetPointerInfoHistory.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar GET_X_LPARAM, GET_Y_LPARAM, IS_POINTER_FIRSTBUTTON_WPARAMy IS_POINTER_SECONDBUTTON_WPARAM para recuperar información relevante de los parámetros wParam y lParam del mensaje de 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
}

En el ejemplo de código siguiente se muestra cómo usar GET_POINTERID_WPARAM para recuperar el identificador de puntero del parámetro wParam del mensaje de 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
}

En el ejemplo de código siguiente se muestra cómo controlar diferentes tipos de puntero.

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 admitido
Windows 8 [solo aplicaciones de escritorio]
Servidor mínimo admitido
Windows Server 2012 [solo aplicaciones de escritorio]
Encabezado
Winuser.h (incluya Windows.h)

Consulte también

mensajes de

de referencia de

marcas de puntero

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