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
그리는 데 사용할 장치 컨텍스트의 핸들입니다.
- stroke
형식: Microsoft.Ink.Stroke
그릴 Stroke 개체입니다.
- da
형식: Microsoft.Ink.DrawingAttributes
그리는 데 사용할 DrawingAttributes 속성입니다. 그리기 특성을 지정하면 Stroke 개체의 그리기 특성이 지정한 특성으로 재정의됩니다.
설명
SetViewTransform 메서드를 사용하는 방법에 따라 펜 너비가 적절히 조정됩니다. 즉, 펜 너비에 뷰 변환 행렬식의 제곱근을 곱하여 배율을 조정합니다.
참고
펜 너비를 명시적으로 설정하지 않은 경우 기본값은 53입니다. 올바른 경계 상자를 그리려면 펜 너비에 행렬식의 제곱근을 곱해야 합니다. 경계 상자의 높이와 너비는 각 방향으로 이 거리의 절반만큼 확장됩니다.
예를 들어 펜 너비가 53이고, 행렬식의 제곱근이 50이고, 경계 상자가 (0, 0, 1000, 1000)이라고 가정해 봅니다. 경계 상자에 대한 펜 너비 조정은 각 방향으로 (53*50)/2로 계산되고 오른쪽과 아래쪽은 1만큼 늘어납니다. 따라서 경계 상자가 (-1325,-1325,2326,2326)으로 렌더링됩니다.
Renderer 개체는 뷰포트 및 창 원점을 0,0으로 설정합니다. 기존 설정은 모두 저장 및 복원되지만 Renderer에서 사용되지는 않습니다. 스크롤을 수행하려면 Renderer 개체의 GetViewTransform 및 GetObjectTransform 메서드를 사용합니다.
보안 정보: |
---|
부분 신뢰 환경에서 사용하는 경우 이 메서드에 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에서 지원