Windows Touch Scratchpad-Beispiel (C++)
Das Windows Touch Scratchpad-Beispiel zeigt, wie Windows Touch-Nachrichten verwendet werden, um Ablaufverfolgungen der Touchpunkte in ein Fenster zu zeichnen. Die Spur des primären Fingers, der zuerst auf den Digitalisierer gelegt wurde, wird schwarz gezeichnet. Sekundäre Finger werden in sechs anderen Farben gezeichnet: Rot, Grün, Blau, Cyan, 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 Touchpunkte zu Strichobjekten hinzuzufügen, und Freihandstriche werden auf dem Bildschirm im WM_PAINT-Nachrichtenhandler 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 Freihandstrichen 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 Freihandstriche im WM_PAINT Meldungshandler auf den Bildschirm 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-Beispiel (C#),Multitouch Scratchpad-Anwendung (WM_TOUCH/C#),Multitouch Scratchpad-Anwendung (WM_TOUCH/C++),Windows-Touch-Beispiele