次の方法で共有


DynamicRenderer.ClipRectangle プロパティ

動的にレンダリングされるストロークを描画する Rectangle 構造体を取得または設定します。

名前空間 :  Microsoft.StylusInput
アセンブリ :  Microsoft.Ink (Microsoft.Ink.dll 内)

構文

'宣言
Public Property ClipRectangle As Rectangle
'使用
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)

プロパティ値

型 : System.Drawing.Rectangle
動的にレンダリングされるストロークを描画する四角形 (ピクセル単位)。

解説

描画される次のストロークに適用される DrawingAttributes プロパティとは異なり、ClipRectangle プロパティは直ちに設定され、描画中のストロークに適用されます。これにより、ストロークが描画されるにつれてクリップ四角形は大きくなります。

DynamicRenderer オブジェクトの Refresh メソッドを Paint イベント ハンドラ内から呼び出す場合、DynamicRenderer オブジェクトの ClipRectangle プロパティを PaintEventArgs オブジェクトの ClipRectangle プロパティに設定します。

ms574877.alert_note(ja-jp,VS.90).gifメモ :

現在、ClipRectangle が中間ストロークで拡張されると、新しいインクを表示するために DynamicRenderer.Refresh 呼び出しが必要になります。ただし、この Refresh 呼び出しは新しいインクが新しい領域に表示されるたびに行う必要があり、これにより、新しい領域でのインク使用時にパフォーマンスの問題が発生する場合があります。

この C# の例では、ストロークがウィンドウの右境界線に近づくと、フォームを水平方向に拡張します。受信したパケットが右境界線から 100 ピクセル以内にある場合、ウィンドウは 100 ピクセル拡張されます。パケットが新しく拡張された領域にある場合は DynamicRenderer.Refresh を呼び出す必要があり、oldWidth フィールドを使用してその領域を追跡する必要があることに注意してください。

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

この Microsoft Visual Basic .NET の例では、ストロークがウィンドウの右境界線に近づくと、フォームを水平方向に拡張します。受信したパケットが右境界線から 100 ピクセル以内にある場合、ウィンドウは 100 ピクセル拡張されます。パケットが新しく拡張された領域にある場合は DynamicRenderer.Refresh を呼び出す必要があり、oldWidth フィールドを使用してその領域を追跡する必要があることに注意してください。

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

プラットフォーム

Windows Vista, Windows XP SP2, Windows Server 2003

.NET Framework および .NET Compact Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

バージョン情報

.NET Framework

サポート対象 : 3.0

参照

参照

DynamicRenderer クラス

DynamicRenderer メンバ

Microsoft.StylusInput 名前空間