Graphics.GetHdc Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar handtaget till den enhetskontext som är associerad med den här Graphics.
public:
virtual IntPtr GetHdc();
public:
IntPtr GetHdc();
public IntPtr GetHdc();
abstract member GetHdc : unit -> nativeint
override this.GetHdc : unit -> nativeint
member this.GetHdc : unit -> nativeint
Public Function GetHdc () As IntPtr
Returer
nativeint
Hantera den enhetskontext som är associerad med den här Graphics.
Implementeringar
Exempel
Följande kodexempel är utformat för användning med Windows Forms och kräver PaintEventArgse, vilket är en parameter för händelsehanteraren Paint. Exemplet visar hur du anropar en Windows GDI-funktion för att utföra samma uppgift som en GDI+ Graphics-metod. Koden utför följande åtgärder:
Definierar attributet interoperabilitet DllImportAttribute för Windows DLL-filen gdi32.dll. Den här DLL-filen innehåller önskad GDI-funktion.
Definierar Rectangle funktionen i DLL:en som extern.
Skapar en röd penna.
Med pennan ritar du en rektangel till skärmen med hjälp av GDI+ DrawRectangle -metoden.
Definierar en intern pekartypsvariabel
hdcoch anger dess värde till handtaget till formulärets enhetskontext.Ritar en rektangel till skärmen med hjälp av GDI-funktionen Rectangle .
Släpper enhetskontexten som representeras av parametern
hdc.
private:
[System::Runtime::InteropServices::DllImportAttribute("gdi32.dll")]
static bool Rectangle( IntPtr hdc, int ulCornerX, int ulCornerY, int lrCornerX, int lrCornerY );
public:
void GetHdcForGDI1( PaintEventArgs^ e )
{
// Create pen.
Pen^ redPen = gcnew Pen( Color::Red,1.0f );
// Draw rectangle with GDI+.
e->Graphics->DrawRectangle( redPen, 10, 10, 100, 50 );
// Get handle to device context.
IntPtr hdc = e->Graphics->GetHdc();
// Draw rectangle with GDI using default pen.
Rectangle( hdc, 10, 70, 110, 120 );
// Release handle to device context.
e->Graphics->ReleaseHdc( hdc );
}
public class GDI
{
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
internal static extern bool Rectangle(
IntPtr hdc,
int ulCornerX, int ulCornerY,
int lrCornerX, int lrCornerY);
}
private void GetHdcForGDI1(PaintEventArgs e)
{
// Create pen.
Pen redPen = new Pen(Color.Red, 1);
// Draw rectangle with GDI+.
e.Graphics.DrawRectangle(redPen, 10, 10, 100, 50);
// Get handle to device context.
IntPtr hdc = e.Graphics.GetHdc();
// Draw rectangle with GDI using default pen.
GDI.Rectangle(hdc, 10, 70, 110, 120);
// Release handle to device context.
e.Graphics.ReleaseHdc(hdc);
}
Public Class GDI
<System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")> _
Friend Shared Function Rectangle(ByVal hdc As IntPtr, _
ByVal ulCornerX As Integer, ByVal ulCornerY As Integer, ByVal lrCornerX As Integer, _
ByVal lrCornerY As Integer) As Boolean
End Function
End Class
<System.Security.Permissions.SecurityPermission( _
System.Security.Permissions.SecurityAction.LinkDemand, Flags:= _
System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)> _
Private Sub GetHdcForGDI1(ByVal e As PaintEventArgs)
' Create pen.
Dim redPen As New Pen(Color.Red, 1)
' Draw rectangle with GDI+.
e.Graphics.DrawRectangle(redPen, 10, 10, 100, 50)
' Get handle to device context.
Dim hdc As IntPtr = e.Graphics.GetHdc()
' Draw rectangle with GDI using default pen.
GDI.Rectangle(hdc, 10, 70, 110, 120)
' Release handle to device context.
e.Graphics.ReleaseHdc(hdc)
End Sub
Kommentarer
Enhetskontexten är en Windows struktur baserad på GDI som definierar en uppsättning grafiska objekt och deras associerade attribut, samt de grafiska lägen som påverkar utdata. Den här metoden returnerar enhetskontexten med undantag för ett teckensnitt. Eftersom ett teckensnitt inte är markerat misslyckas anrop till FromHdc metoden med hjälp av ett handtag som returneras från GetHdc metoden.
Anrop till GetHdc metoderna och ReleaseHdc måste visas i par. Under omfånget för ett GetHdcReleaseHdc och metodpar gör du vanligtvis bara anrop till GDI-funktioner. Anrop i det omfånget som görs till GDI+-metoder för Graphics den som skapade parametern hdc misslyckas med ett ObjectBusy fel. Dessutom ignorerar GDI+ alla tillståndsändringar som gjorts Graphics i parametern hdc i efterföljande åtgärder.