loading...

lunes, 14 de febrero de 2011

Windows 7 llega con la gestión de multi-touch? ¿Qué son los mensajes de Windows Asociados?

I. Windows 7 llega con la gestión de multi-touch? ¿Qué son los mensajes de Windows Asociados?

A pesar de la multi-touch no es nuevo como tal, Windows 7 es el primer sistema operativo de Microsoft proporciona soporte nativo para esta tecnología.

Para apoyar esta tecnología, varios mensajes de Windows se han añadido al sistema, incluyendo:

  • WM_TOUCH : ¿Quién puede recuperar la información relacionada con la presión en la pantalla (número total de las presiones, coordenadas, etc ...)
  • WM_GESTURE : ¿Quién puede obtener un movimiento (gesto) individuales, dirigidas por el usuario en la superficie de la pantalla. Windows 7 reconoce de forma nativa varios gestos, como la rotación, la escala (zoom in y zoom), la presión sobre la pantalla, la distancia entre dos dedos.
  • Gestion du message WM_TOUCH

    case WM_TOUCH:
    {
    // Un message WM_TOUCH peut contenir plusieurs messages provenant de differents contactes
    unsigned int numInputs = (int) wParam; // Nombres de contactes
    TOUCHINPUT* ti = new TOUCHINPUT[numInputs]; //

    if (GetTouchInputInfo((HTOUCHINPUT)lParam, numInputs, ti, sizeof(TOUCHINPUT)))
    {
    for (unsigned int i=0; i<numInputs; ++i)
    {
    if (ti[i].dwFlags & TOUCHEVENTF_DOWN)
    {
    OnTouchDownHandler(hWnd, ti[i]);
    }
    else if (ti[i].dwFlags & TOUCHEVENTF_MOVE)
    {
    OnTouchMoveHandler(hWnd, ti[i]);
    }
    else if (ti[i].dwFlags & TOUCHEVENTF_UP)
    {
    OnTouchUpHandler(hWnd, ti[i]);
    }
    }
    }
    CloseTouchInputHandle((HTOUCHINPUT)lParam);
    delete [] ti;
    }

    Gestion du message WM_GESTURE

    // Entry point to the application
    LRESULT DecodeGesture(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
    // Create a structure to populate and retrieve the extra message info.
    GESTUREINFO gi;
    ZeroMemory(&gi, sizeof(GESTUREINFO));
    gi.cbSize = sizeof(GESTUREINFO);

    BOOL bResult = GetGestureInfo((HGESTUREINFO)lParam, &gi);
    BOOL bHandled = FALSE;

    if (bResult){
    // now interpret the gesture
    switch (gi.dwID){
    case GID_ZOOM:
    // Code for zooming goes here
    bHandled = TRUE;
    break;
    case GID_PAN:
    // Code for panning goes here
    bHandled = TRUE;
    break;
    case GID_ROTATE:
    // Code for rotation goes here
    bHandled = TRUE;
    break;
    case GID_TWOFINGERTAP:
    // Code for two-finger tap goes here
    bHandled = TRUE;
    break;
    case GID_PRESSANDTAP:
    // Code for roll over goes here
    bHandled = TRUE;
    break;
    default:
    // A gesture was not recognized
    break;
    }
    }
    else
    {
    DWORD dwErr = GetLastError();
    if (dwErr > 0){
    //MessageBoxW(hWnd, L"Error!", L"Could not retrieve a GESTUREINFO structure.", MB_OK);
    }
    }
    if (bHandled){
    return 0;
    }
    else
    {
    return DefWindowProc(hWnd, message, wParam, lParam);
    }

    Pour plus d'infos :

No hay comentarios:

Publicar un comentario