Compartir a través de


Ejemplo de Panel táctil de Windows (C++)

En el ejemplo de Windows Touch Scratchpad se muestra cómo usar los mensajes de Windows Touch para dibujar seguimientos de los puntos táctiles en una ventana. El rastro del dedo primario, el que se puso en el digitalizador primero, se dibuja en negro. Los dedos secundarios se dibujan en seis otros colores: rojo, verde, azul, cian, magenta y amarillo. En la imagen siguiente se muestra cómo podría verse la aplicación mientras se ejecutaba.

captura de pantalla que muestra el panel táctil de ventanas, con subrayados ondulados rojos y negros en la pantalla

Para esta aplicación, la ventana se registra como una ventana táctil, los mensajes táctiles se interpretan para agregar puntos táctiles a objetos de trazo y los trazos de lápiz se representan en la pantalla en el controlador de mensajes de WM_PAINT .

En el código siguiente se muestra cómo se registra la ventana como una ventana táctil.

    // Register application window for receiving multitouch input. Use default settings.
    if(!RegisterTouchWindow(hWnd, 0))
    {
        MessageBox(hWnd, L"Cannot register application window for multitouch input", L"Error", MB_OK);
        return FALSE;
    }

En el código siguiente se muestra cómo se usan los mensajes táctiles para agregar puntos táctiles a trazos de lápiz.

        // WM_TOUCH message handlers
        case WM_TOUCH:
            {
                // WM_TOUCH message can contain several messages from different contacts
                // packed together.
                // Message parameters need to be decoded:
                unsigned int numInputs = (unsigned int) wParam; // Number of actual per-contact messages
                TOUCHINPUT* ti = new TOUCHINPUT[numInputs]; // Allocate the storage for the parameters of the per-contact messages
                if(ti == NULL)
                {
                    break;
                }
                // Unpack message parameters into the array of TOUCHINPUT structures, each
                // representing a message for one single contact.
                if(GetTouchInputInfo((HTOUCHINPUT)lParam, numInputs, ti, sizeof(TOUCHINPUT)))
                {
                    // For each contact, dispatch the message to the appropriate message
                    // handler.
                    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;
            }
            break;

En el código siguiente se muestra cómo se dibujan los trazos de lápiz en la pantalla del controlador de mensajes WM_PAINT .

        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            // Full redraw: draw complete collection of finished strokes and
            // also all the strokes that are currently in drawing.
            g_StrkColFinished.Draw(hdc);
            g_StrkColDrawing.Draw(hdc);
            EndPaint(hWnd, &ps);
            break;

En el código siguiente se muestra cómo el objeto de trazo representa los trazos en la pantalla.

void CStroke::Draw(HDC hDC) const
{
    if(m_nCount < 2)
    {
        return;
    }

    HPEN hPen = CreatePen(PS_SOLID, 3, m_clr);
    HGDIOBJ hOldPen = SelectObject(hDC, hPen);
    Polyline(hDC, m_arrData, m_nCount);
    SelectObject(hDC, hOldPen);
    DeleteObject(hPen);
}

Ejemplo de Panel temporal táctil de Windows (C#),Aplicación de panel temporal multitáctil (WM_TOUCH/C#),Aplicación de panel temporal multitáctil (WM_TOUCH/C++),Ejemplos táctiles de Windows