InkOverlay.Draw 方法

设置一个矩形,将在其中重新绘制 InkOverlay 对象中的墨迹

命名空间:  Microsoft.Ink
程序集:  Microsoft.Ink(在 Microsoft.Ink.dll 中)

语法

声明
Public Sub Draw ( _
    rDrawRect As Rectangle _
)
用法
Dim instance As InkOverlay
Dim rDrawRect As Rectangle

instance.Draw(rDrawRect)
public void Draw(
    Rectangle rDrawRect
)
public:
void Draw(
    Rectangle rDrawRect
)
public void Draw(
    Rectangle rDrawRect
)
public function Draw(
    rDrawRect : Rectangle
)

参数

备注

当 rDrawRect 参数为 nullnull 引用(在 Visual Basic 中为 Nothing)(在 Microsoft Visual Basic .NET 中为 Nothing)时,将重新绘制整个窗口。

此方法非常适用于重新绘制已通过编程方式更改的笔画。也可以调用 Control.Invalidate 方法,但这样做会导致重新绘制 InkOverlay 对象的所有笔画。还可以为实现此目的调用 Renderer.Draw 方法,但是 Renderer 对象无法以选中状态绘制任何笔画,因为该对象不了解哪些笔画在 Selection 集合中。

备注

若要使绘制得以进行,必须将 AutoRedraw 属性设置为 true。

示例

此 C# 示例是一个方法,该方法更改 Strokes 集合中所有属于 Ink 对象(该对象与一个 InkOverlay 对象 theInkOverlay 关联)的笔画的颜色。对 Stroke 对象的 DrawingAttributes 属性的更改不是自动执行且立即可见的。可以对与 theInkOverlay 关联的控件调用 InvalidateRefresh 方法,但这样做会导致重新绘制 theInkOverlay 中的所有 Stroke 对象。若要提高性能,请对 Strokes 集合的边框使用 Draw 方法。请注意,这意味着将该边框从墨迹空间 坐标转换为像素坐标。

private void ChangeColor(Strokes theStrokes, Color newColor)
{
    // Change the color of theStrokes
    foreach (Stroke stroke in theStrokes)
    {
        stroke.DrawingAttributes.Color = newColor;
    }

    // Convert bounding box to pixel coordinates
    Graphics g = CreateGraphics();
    Rectangle strokesBounds = theStrokes.GetBoundingBox();
    Point topLeft = strokesBounds.Location;
    Point bottomRight = strokesBounds.Location + strokesBounds.Size;
    theInkOverlay.Renderer.InkSpaceToPixel(g, ref topLeft);
    theInkOverlay.Renderer.InkSpaceToPixel(g, ref bottomRight);
    g.Dispose()
    strokesBounds = new Rectangle(topLeft, 
        new Size(bottomRight.X - topLeft.X, bottomRight.Y - topLeft.Y));

    // Redraw the strokes
    theInkOverlay.Draw(strokesBounds);
}

此 Visual Basic .NET 示例是一个方法,该方法更改 Strokes 集合中所有属于 Ink 对象(该对象与一个 InkOverlay 对象 theInkOverlay 关联)的笔画的颜色。对 Stroke 对象的 DrawingAttributes 属性的更改不是自动执行且立即可见的。可以对与 theInkOverlay 关联的控件调用 InvalidateRefresh 方法,但这样做会导致重新绘制 theInkOverlay 中的所有 Stroke 对象。若要提高性能,请对 Strokes 集合的边框使用 Draw 方法。请注意,这意味着将该边框从墨迹空间 坐标转换为像素坐标。

Private Sub ChangeColor(ByVal theStrokes As Strokes, ByVal newColor As Color)
    ' Change the color of theStrokes
    Dim theStroke As Stroke
    For Each theStroke In theStrokes
        theStroke.DrawingAttributes.Color = newColor
    Next

    'Convert bounding box to pixel coordinates
    Dim g As Graphics = CreateGraphics()
    Dim strokesBounds As Rectangle = theStrokes.GetBoundingBox()
    Dim topLeft As Point = strokesBounds.Location
    Dim bottomRight As Point = New Point(strokesBounds.Right, strokesBounds.Bottom)
    theInkOverlay.Renderer.InkSpaceToPixel(g, topLeft)
    theInkOverlay.Renderer.InkSpaceToPixel(g, bottomRight)
    g.Dispose()
    strokesBounds = New Rectangle(topLeft, _
        New Size(bottomRight.X - topLeft.X, bottomRight.Y - topLeft.Y))

    'Redraw the strokes
    theInkOverlay.Draw(strokesBounds)

    End Sub

平台

Windows Vista

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求

版本信息

.NET Framework

受以下版本支持:3.0

另请参见

参考

InkOverlay 类

InkOverlay 成员

Microsoft.Ink 命名空间

Renderer.Draw