DynamicRenderer.ClipRectangle-Eigenschaft
Ruft die Rectangle-Struktur auf, in der die dynamisch gerenderten Striche gezeichnet werden sollen.
Namespace: Microsoft.StylusInput
Assembly: Microsoft.Ink (in Microsoft.Ink.dll)
Syntax
'Declaration
Public Property ClipRectangle As Rectangle
'Usage
Dim instance As DynamicRenderer
Dim value As Rectangle
value = instance.ClipRectangle
instance.ClipRectangle = value
public Rectangle ClipRectangle { get; set; }
public:
property Rectangle ClipRectangle {
Rectangle get ();
void set (Rectangle value);
}
/** @property */
public Rectangle get_ClipRectangle()
/** @property */
public void set_ClipRectangle(Rectangle value)
public function get ClipRectangle () : Rectangle
public function set ClipRectangle (value : Rectangle)
Eigenschaftenwert
Typ: System.Drawing.Rectangle
Das Rechteck (in Pixeln), in dem die dynamisch gerenderten Strokes gezeichnet werden sollen.
Hinweise
Die ClipRectangle-Eigenschaft wird sofort festgelegt und auf den gezeichneten Strich angewendet. Im Gegensatz dazu wird die DrawingAttributes-Eigenschaft auf den als nächstes zu zeichnenden Strich angewendet. Daher dehnt sich das Cliprechteck parallel zum gezeichneten Strich aus.
Wenn Sie die Refresh-Methode des DynamicRenderer-Objekts aus einem Paint-Ereignishandler aufrufen, legen Sie die ClipRectangle-Eigenschaft des DynamicRenderer-Objekts auf die ClipRectangle-Eigenschaft des PaintEventArgs-Objekts fest.
Hinweis
Wenn ClipRectangle derzeit in der Strichmitte erweitert wird, dann wird ein DynamicRenderer.Refresh-Aufruf benötigt, um die neue Freihandeingabe anzuzeigen. Dieser Refresh-Aufruf muss jedes Mal erfolgen, wenn eine neue Freihandeingabe in einem neuen Bereich auftritt. Jedoch können Leistungsprobleme bei der Freihandeingabe im neuen Bereich die Folge sein.
Beispiele
In diesem C#-Beispiel wird ein Formular horizontal erweitert, wenn ein Strich in die Nähe des rechten Fensterrahmens gerät. Wird ein Paket empfangen, das sich innerhalb von 100 Pixeln Entfernung vom rechten Rahmen befindet, dann wird das Fenster auf 100 Pixel erweitert. Erwägen Sie einen Aufruf von DynamicRenderer.Refresh, wenn sich das Paket im neu erweiterten Bereich befindet und Sie diesen Bereich verwalten müssen, indem Sie das oldWidth-Feld verwenden.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.Ink;
using Microsoft.StylusInput;
using Microsoft.StylusInput.PluginData;
namespace TestDynamicRendererClipRectangle
{
public class Form1 : System.Windows.Forms.Form, Microsoft.StylusInput.IStylusAsyncPlugin
{
private RealTimeStylus theRealTimeStylus;
private DynamicRenderer theDynamicRenderer;
private Renderer theRenderer;
private int oldWidth;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
InitializeComponent();
theDynamicRenderer = new DynamicRenderer(this);
theRenderer = new Renderer();
// Create the real time stylus used to receive stylus notifications
theRealTimeStylus = new RealTimeStylus(this, true);
// Add the dynamic renderer to the synchronous plugin notification chain.
// Synchronous notifications occur on the pen thread.
theRealTimeStylus.SyncPluginCollection.Add(theDynamicRenderer);
// Add the form to the asynchronous plugin notification chain. This plugin
// will be used to collect stylus data into an ink object. Asynchronous
// notifications occur on the UI thread.
theRealTimeStylus.AsyncPluginCollection.Add(this);
// Enable the real time stylus and the dynamic renderer
theRealTimeStylus.Enabled = true;
theDynamicRenderer.Enabled = true;
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
// Use the oldWidth field to keep track of where the newly-expanded region is.
private void Form1_Load(object sender, System.EventArgs e)
{
oldWidth = this.Width;
}
// Set interest in packets and stylus up
public DataInterestMask DataInterest
{
get
{
return DataInterestMask.Packets |
DataInterestMask.StylusUp;
}
}
// Check to see if we are drawing near the right side of the form.
// Remember, this method needs to be "light-weight" in order not to
// slow performance.
public void Packets(RealTimeStylus sender, PacketsData data)
{
// Find out where we are drawing in pixel space.
Point location = new Point(data[0], data[1]);
Graphics formGraphics = this.CreateGraphics();
theRenderer.InkSpaceToPixel(formGraphics, ref location);
// Check to see if we are 100 pixels from the right edge
if (this.Right - location.X < 100)
{
// Grow the form and the clip rectangle
this.Width += 100;
location = new Point(this.Right, this.Bottom);
theRenderer.PixelToInkSpace(formGraphics, ref location);
theDynamicRenderer.ClipRectangle = new Rectangle(0, 0, location.X, location.Y);
}
// Currently, we need to call Refresh on the DynamicRenderer if we are in the new
// region in order for the ink to show up.
if (location.X >= oldWidth - 100)
{
theDynamicRenderer.Refresh();
}
}
// Update the old width each time the stylus comes up
public void StylusUp(RealTimeStylus sender, StylusUpData data)
{
oldWidth = this.Width;
}
// The remaining interface methods are not used in this sample application.
public void CustomStylusDataAdded(RealTimeStylus sender, CustomStylusData data){}
public void Error(RealTimeStylus sender, ErrorData data){}
public void InAirPackets(RealTimeStylus sender, InAirPacketsData data){}
public void RealTimeStylusDisabled(RealTimeStylus sender, RealTimeStylusDisabledData data) {}
public void RealTimeStylusEnabled(RealTimeStylus sender, RealTimeStylusEnabledData data){}
public void StylusDown(RealTimeStylus sender, StylusDownData data){}
public void StylusOutOfRange(RealTimeStylus sender, StylusOutOfRangeData data) {}
public void StylusInRange(RealTimeStylus sender, StylusInRangeData data) {}
public void StylusButtonDown(RealTimeStylus sender, StylusButtonDownData data) {}
public void StylusButtonUp(RealTimeStylus sender, StylusButtonUpData data) {}
public void SystemGesture(RealTimeStylus sender, SystemGestureData data){}
public void TabletAdded(RealTimeStylus sender, TabletAddedData data){}
public void TabletRemoved(RealTimeStylus sender, TabletRemovedData data) {}
}
}
In diesem Microsoft Visual Basic .NET-Beispiel wird ein Formular horizontal erweitert, wenn ein Strich in die Nähe des rechten Fensterrahmens gerät. Wird ein Paket empfangen, das sich innerhalb von 100 Pixeln Entfernung vom rechten Rahmen befindet, dann wird das Fenster auf 100 Pixel erweitert. Erwägen Sie einen Aufruf von DynamicRenderer.Refresh, wenn sich das Paket im neu erweiterten Bereich befindet und Sie diesen Bereich verwalten müssen, indem Sie das oldWidth-Feld verwenden.
Imports Microsoft.Ink
Imports Microsoft.StylusInput
Public Class Form1
Inherits System.Windows.Forms.Form
Implements IStylusAsyncPlugin
Private theRealTimeStylus As RealTimeStylus
Private theDynamicRenderer As DynamicRenderer
Private theRenderer As Renderer
Private oldWidth As Integer
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
Me.theDynamicRenderer = New DynamicRenderer(Me)
Me.theRenderer = New Renderer()
' Create the real time stylus used to receive stylus notifications
Me.theRealTimeStylus = New RealTimeStylus(Me, True)
' Add the dynamic renderer to the synchronous plugin notification chain.
' Synchronous notifications occur on the pen thread.
Me.theRealTimeStylus.SyncPluginCollection.Add(theDynamicRenderer)
' Add the form to the asynchronous plugin notification chain. This plugin
' will be used to collect stylus data into an ink object. Asynchronous
' notifications occur on the UI thread.
Me.theRealTimeStylus.AsyncPluginCollection.Add(Me)
' Enable the real time stylus and the dynamic renderer
Me.theRealTimeStylus.Enabled = True
Me.theDynamicRenderer.Enabled = True
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
Me.Text = "Form1"
End Sub
#End Region
' Use the oldWidth field to keep track of where the newly-expanded region is.
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.oldWidth = Me.Width
End Sub
' Set interest in packets and stylus up
Overridable Overloads ReadOnly Property DataInterest() As DataInterestMask Implements _
IStylusAsyncPlugin.DataInterest
Get
Return DataInterestMask.Packets Or DataInterestMask.StylusUp
End Get
End Property
' Check to see if we are drawing near the right side of the form.
' Remember, this method needs to be "light-weight" in order not to
' slow performance.
Public Sub Packets(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.PacketsData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.Packets
' Find out where we are drawing in pixel space.
Dim location As New Point(data(0), data(1))
Dim formGraphics As Graphics = Me.CreateGraphics()
Me.theRenderer.InkSpaceToPixel(formGraphics, location)
' Check to see if we are 100 pixels from the right edge
If Me.Right - location.X < 100 Then
' Grow the form and the clip rectangle
Me.Width = Me.Width + 100
location = New Point(Me.Right, Me.Bottom)
Me.theRenderer.PixelToInkSpace(formGraphics, location)
Me.theDynamicRenderer.ClipRectangle = New Rectangle(0, 0, location.X, location.Y)
End If
' Currently, we need to call Refresh on the DynamicRenderer if we are in the new
' region in order for the ink to show up.
If location.X >= oldWidth - 100 Then
theDynamicRenderer.Refresh()
End If
End Sub
' Update the old width each time the stylus comes up
Public Sub StylusUp(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.StylusUpData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.StylusUp
Me.oldWidth = Me.Width
End Sub
' The remaining interface methods are not used in this sample application.
Public Sub CustomStylusDataAdded(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.CustomStylusData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.CustomStylusDataAdded
End Sub
Public Sub [Error](ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.ErrorData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.Error
End Sub
Public Sub InAirPackets(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.InAirPacketsData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.InAirPackets
End Sub
Public Sub RealTimeStylusDisabled(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.RealTimeStylusDisabledData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.RealTimeStylusDisabled
End Sub
Public Sub RealTimeStylusEnabled(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.RealTimeStylusEnabledData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.RealTimeStylusEnabled
End Sub
Public Sub StylusButtonDown(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.StylusButtonDownData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.StylusButtonDown
End Sub
Public Sub StylusButtonUp(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.StylusButtonUpData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.StylusButtonUp
End Sub
Public Sub StylusDown(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.StylusDownData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.StylusDown
End Sub
Public Sub StylusInRange(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.StylusInRangeData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.StylusInRange
End Sub
Public Sub StylusOutOfRange(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.StylusOutOfRangeData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.StylusOutOfRange
End Sub
Public Sub SystemGesture(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.SystemGestureData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.SystemGesture
End Sub
Public Sub TabletAdded(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.TabletAddedData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.TabletAdded
End Sub
Public Sub TabletRemoved(ByVal sender As Microsoft.StylusInput.RealTimeStylus, _
ByVal data As Microsoft.StylusInput.PluginData.TabletRemovedData) Implements _
Microsoft.StylusInput.IStylusAsyncPlugin.TabletRemoved
End Sub
End Class
Plattformen
Windows Vista, Windows XP SP2, Windows Server 2003
.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Versionsinformationen
.NET Framework
Unterstützt in: 3.0