다음을 통해 공유


Renderer.Draw 메서드 (IntPtr, Stroke, DrawingAttributes)

업데이트: 2007년 11월

전달된 핸들을 소유하는 장치 컨텍스트에 DrawingAttributes를 사용하여 Stroke 개체를 그립니다.

네임스페이스:  Microsoft.Ink
어셈블리:  Microsoft.Ink(Microsoft.Ink.dll)

구문

‘선언
<UIPermissionAttribute(SecurityAction.Demand, Window := UIPermissionWindow.SafeTopLevelWindows)> _
<SecurityPermissionAttribute(SecurityAction.Demand, UnmanagedCode := True)> _
<PermissionSetAttribute(SecurityAction.InheritanceDemand, Name := "FullTrust")> _
Public Sub Draw ( _
    hdc As IntPtr, _
    stroke As Stroke, _
    da As DrawingAttributes _
)
‘사용 방법
Dim instance As Renderer
Dim hdc As IntPtr
Dim stroke As Stroke
Dim da As DrawingAttributes

instance.Draw(hdc, stroke, da)
[UIPermissionAttribute(SecurityAction.Demand, Window = UIPermissionWindow.SafeTopLevelWindows)]
[SecurityPermissionAttribute(SecurityAction.Demand, UnmanagedCode = true)]
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
public void Draw(
    IntPtr hdc,
    Stroke stroke,
    DrawingAttributes da
)
[UIPermissionAttribute(SecurityAction::Demand, Window = UIPermissionWindow::SafeTopLevelWindows)]
[SecurityPermissionAttribute(SecurityAction::Demand, UnmanagedCode = true)]
[PermissionSetAttribute(SecurityAction::InheritanceDemand, Name = L"FullTrust")]
public:
void Draw(
    IntPtr hdc, 
    Stroke^ stroke, 
    DrawingAttributes^ da
)
/** @attribute UIPermissionAttribute(SecurityAction.Demand, Window = UIPermissionWindow.SafeTopLevelWindows) */
/** @attribute SecurityPermissionAttribute(SecurityAction.Demand, UnmanagedCode = true) */
/** @attribute PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust") */
public void Draw(
    IntPtr hdc,
    Stroke stroke,
    DrawingAttributes da
)
public function Draw(
    hdc : IntPtr, 
    stroke : Stroke, 
    da : DrawingAttributes
)

매개 변수

  • hdc
    형식: System.IntPtr
    그리는 데 사용할 장치 컨텍스트의 핸들입니다.

설명

참고

가능하면 IntPtr을 받는 오버로드 대신 Graphics 개체를 받는 적절한 오버로드를 사용해야 합니다.

SetViewTransform 메서드를 사용하는 방법에 따라 펜 너비가 적절히 조정됩니다. 즉, 펜 너비에 뷰 변환 행렬식의 제곱근을 곱하여 배율을 조정합니다.

참고

펜 너비를 명시적으로 설정하지 않은 경우 기본값은 53입니다. 올바른 경계 상자를 그리려면 펜 너비에 행렬식의 제곱근을 곱해야 합니다. 경계 상자의 높이와 너비는 각 방향으로 이 거리의 절반만큼 확장됩니다.

예를 들어 펜 너비가 53이고, 행렬식의 제곱근이 50이고, 경계 상자가 (0, 0, 1000, 1000)이라고 가정해 봅니다. 경계 상자에 대한 펜 너비 조정은 각 방향으로 (53*50)/2로 계산되고 오른쪽과 아래쪽은 1만큼 늘어납니다. 따라서 경계 상자가 (-1325,-1325,2326,2326)으로 렌더링됩니다.

Renderer 개체는 뷰포트 및 창 원점을 0,0으로 설정합니다. 기존 설정은 모두 저장 및 복원되지만 Renderer에서 사용되지는 않습니다. 스크롤을 수행하려면 Renderer 개체의 GetViewTransformGetObjectTransform 메서드를 사용합니다.

ms569822.alert_security(ko-kr,VS.90).gif보안 정보:

부분 신뢰 환경에서 사용하는 경우 이 메서드에 SecurityPermissionFlag.UnmanagedCode 권한 및 InkCollector에서 요구하는 권한이 필요합니다. 보안 문제 및 부분 신뢰에 대한 자세한 내용은 Security and Trust를 참조하십시오.

예제

이 예제에서는 InkOverlay 개체에 연결된 Ink 개체에서 가져온 전체 Strokes 컬렉션을 InkOverlay 개체 자체에 연결되지 않은 Panel에 표시합니다.

또한 다른 패널에 Stroke 개체를 그릴 때 수정된 DrawingAttributes 개체를 사용합니다. 수정 내용이 적용되어 스트로크의 색이 반전되고 너비가 두 배가 됩니다. 그런 다음 수정된 DrawingAttributes 개체를 da 매개 변수를 통해 Draw 메서드에 전달합니다. 원래 스트로크의 DrawingAttributes는 영향을 받지 않습니다.

' Access to the Ink.Strokes property returns a copy of the Strokes object.
' This copy must be implicitly (via using statement) or explicitly
' disposed of in order to avoid a memory leak.
Using allStrokes As Strokes = mInkOverlay.Ink.Strokes
    ' get a graphics object for another panel
    Using g As Graphics = Me.panelForDraw.CreateGraphics()
        ' get a Renderer object. We could have used
        ' mInkOverlay.Renderer, this is another way
        Dim R As Renderer = New Renderer()
        ' get the handle to the device context
        Dim hdc As IntPtr = g.GetHdc()
        ' traverse the stroke collection
        For Each oneStroke As Stroke In allStrokes
            Dim da As DrawingAttributes = oneStroke.DrawingAttributes.Clone()
            ' invert the stroke color
            Dim cR As Byte = Not da.Color.R
            Dim cG As Byte = Not da.Color.G
            Dim cB As Byte = Not da.Color.B
            da.Color = Color.FromArgb(da.Color.A, cR, cG, cB)
            ' double the stroke width
            da.Width *= 2
            ' draw the stroke
            R.Draw(hdc, oneStroke, da)
        Next
        ' release the handle to the device context
        g.ReleaseHdc(hdc)
    End Using
End Using
// Access to the Ink.Strokes property returns a copy of the Strokes object.
// This copy must be implicitly (via using statement) or explicitly
// disposed of in order to avoid a memory leak.
using (Strokes allStrokes = mInkOverlay.Ink.Strokes)
{
    // get a graphics object for another panel
    using (Graphics g = this.panelForDraw.CreateGraphics())
    {
        // get a Renderer object. We could have used
        // mInkOverlay.Renderer, this is another way
        Renderer R = new Renderer();
        // get the handle to the device context
        IntPtr hdc = g.GetHdc();
        // traverse the stroke collection
        foreach (Stroke oneStroke in allStrokes)
        {
            DrawingAttributes da = oneStroke.DrawingAttributes.Clone();
            // invert the stroke color
            byte cR = (byte)~(da.Color.R);
            byte cG = (byte)~(da.Color.G);
            byte cB = (byte)~(da.Color.B);
            da.Color = Color.FromArgb(da.Color.A, cR, cG, cB);
            // double the stroke width
            da.Width *= 2;
            // draw the stroke
            R.Draw(hdc, oneStroke, da);
        }
        // release the handle to the device context
        g.ReleaseHdc(hdc);
    }
}

플랫폼

Windows Vista

.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

3.0에서 지원

참고 항목

참조

Renderer 클래스

Renderer 멤버

Draw 오버로드

Microsoft.Ink 네임스페이스

Renderer.SetViewTransform

DrawingAttributes

Strokes

Stroke