Partager via


Exemple de bloc-notes Windows Touch (C++)

L’exemple Windows Touch Scratchpad montre comment utiliser des messages Windows Touch pour dessiner des traces des points tactiles vers une fenêtre. La trace du doigt primaire, celui qui a été placé en premier sur le numériseur, est dessinée en noir. Les doigts secondaires sont dessinés dans six autres couleurs : rouge, vert, bleu, cyan, magenta et jaune. L’image suivante montre à quoi l’application peut ressembler lors de l’exécution.

capture d’écran montrant le bloc-notes tactile windows, avec des cintres rouges et noirs à l’écran

Pour cette application, la fenêtre est inscrite en tant que fenêtre tactile, les messages tactiles sont interprétés pour ajouter des points tactiles aux objets traits et les traits d’encre sont rendus à l’écran dans le gestionnaire de messages WM_PAINT .

Le code suivant montre comment la fenêtre est inscrite en tant que fenêtre tactile.

    // 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;
    }

Le code suivant montre comment les messages tactiles sont utilisés pour ajouter des points tactiles aux traits d’encre.

        // 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;

Le code suivant montre comment les traits d’encre sont dessinés à l’écran dans le gestionnaire de messages 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;

Le code suivant montre comment l’objet stroke affiche les traits à l’écran.

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);
}

Exemple de bloc d’action Windows Touch (C#),application pavé de travail tactile multipoint (WM_TOUCH/C#),application de bloc-notes tactile multipoint (WM_TOUCH/C++),exemples Windows Touch