Windows Touch Scratchpad-Beispiel (C++)
Das Windows Touch Scratchpad-Beispiel zeigt, wie Sie touch-Nachrichten Windows, um Ablaufverfolgungen der Berührungspunkte in ein Fenster zu zeichnen. Die Ablaufverfolgung des primären Fingers, der zuerst auf den Digitizer gezogen wurde, wird schwarz gezeichnet. Sekundäre Finger werden in sechs weiteren Farben gezeichnet: Rot, Grün, Blau, Zyan, Magenta und Gelb. Die folgende Abbildung zeigt, wie die Anwendung während der Ausführung aussehen könnte.

Für diese Anwendung wird das Fenster als Touchfenster registriert, Touchnachrichten werden interpretiert, um Strichobjekten Berührungspunkte hinzuzufügen, und Ink-Striche werden auf dem Bildschirm im WM_PAINT gerendert.
Der folgende Code zeigt, wie das Fenster als Touchfenster registriert wird.
// 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;
}
Der folgende Code zeigt, wie Touchnachrichten verwendet werden, um Touchpunkte zu Ink-Strichen hinzuzufügen.
// 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;
Der folgende Code zeigt, wie die Ink-Striche auf den Bildschirm im WM_PAINT gezeichnet werden.
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;
Der folgende Code zeigt, wie das Strichobjekt Striche auf dem Bildschirm rendert.
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);
}
Zugehörige Themen
Windows Touch Scratchpad Sample (C#), Multi-touch Scratchpad Application (WM_TOUCH/C#), Multi-touch Scratchpad Application (WM_TOUCH/C++), Windows Touch Samples