Real-Time スタイラス サンプルを使用した Windows Touch Scratchpad (C#)
Windows Touch Scratchpad サンプル (MTScratchpadRTStylus) は、Windows タッチ メッセージを使用して、タッチ ポイントのトレースをウィンドウに描画する方法を示しています。 デジタイザーに最初に付けた指の跡は黒で描かれます。 2 番目の指は、赤、緑、青、シアン、マゼンタ、黄色の 6 色で描画されます。 次のスクリーン ショットは、実行中にアプリケーションがどのように表示されるかを示しています。
このサンプルでは、Real-Time スタイラス (RTS) オブジェクトが作成され、複数の連絡先ポイントのサポートが有効になります。 コンテンツをレンダリングするために、DynamicRenderer プラグインが RTS に追加されます。 プラグイン EventHandlerPlugIn は、指の数を追跡し、動的レンダラーが描画している色を変更するために実装されています。 RTS プラグイン スタック内の両方のプラグインを使用すると、Windows Touch Scratchpad アプリケーションは、主連絡先を黒でレンダリングし、残りの連絡先をさまざまな色でレンダリングします。
次のコードは、EventHandlerPlugIn が連絡先の数をインクリメントしてデクリメントし、動的レンダラーの色を設定する方法を示しています。
public void StylusDown(RealTimeStylus sender, StylusDownData data)
{
// Set new stroke color to the DrawingAttributes of the DynamicRenderer
// If there are no fingers down, this is a primary contact
dynamicRenderer.DrawingAttributes.Color = touchColor.GetColor(cntContacts == 0);
++cntContacts; // Increment finger-down counter
}
public void StylusUp(RealTimeStylus sender, StylusUpData data)
{
--cntContacts; // Decrement finger-down counter
}
次のコードは、複数の連絡先ポイントのサポートを使用して RTS を作成する方法を示しています。
private void OnLoadHandler(Object sender, EventArgs e)
{
// Create RealTimeStylus object and enable it for multi-touch
realTimeStylus = new RealTimeStylus(this);
realTimeStylus.MultiTouchEnabled = true;
// Create DynamicRenderer and event handler, and add them to the RTS object as synchronous plugins
dynamicRenderer = new DynamicRenderer(this);
eventHandler = new EventHandlerPlugIn(this.CreateGraphics(), dynamicRenderer);
realTimeStylus.SyncPluginCollection.Add(eventHandler);
realTimeStylus.SyncPluginCollection.Add(dynamicRenderer);
// Enable RTS and DynamicRenderer object, and enable auto-redraw of the DynamicRenderer
realTimeStylus.Enabled = true;
dynamicRenderer.Enabled = true;
dynamicRenderer.EnableDataCache = true;
}
DynamicRenderer オブジェクトの色が変更され、ストロークが描画されると、DynamicRenderer::Refresh を呼び出すと、新しいストロークが表示されます。 次のコードは、OnPaintHandler メソッドでこれを実行する方法を示しています。
private void OnPaintHandler(object sender, PaintEventArgs e)
{
// Erase the background
Brush brush = new SolidBrush(SystemColors.Window);
e.Graphics.FillRectangle(brush, ClientRectangle);
// Ask DynamicRenderer to redraw itself
dynamicRenderer.Refresh();
}
関連トピック
マルチタッチ スクラッチパッド アプリケーション (RTS/C#)、 マルチタッチ スクラッチパッド アプリケーション (RTS/C++)、 Windows タッチ サンプル