Graphics.GetHdc Yöntem

Tanım

Tanıtıcıyı bu Graphicsile ilişkilendirilmiş cihaz bağlamı için alır.

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

Döndürülenler

IntPtr

nativeint

Bu Graphicsile ilişkilendirilmiş cihaz bağlamını işle.

Uygulamalar

Örnekler

Aşağıdaki kod örneği Windows Forms ile kullanılmak üzere tasarlanmıştır ve PaintEventArgs olay işleyicisinin bir parametresi olan ePaint gerektirir. Örnekte, GDI+ Graphics yöntemiyle aynı görevi gerçekleştirmek için bir Windows GDI işlevinin çağrılması gösterilmektedir. Kod aşağıdaki eylemleri gerçekleştirir:

  • Windows DLL dosyası gdi32.dlliçin birlikte çalışabilirlik DllImportAttribute özniteliğini tanımlar. Bu DLL istenen GDI işlevini içerir.

  • Rectangle Bu DLL'deki işlevi dış olarak tanımlar.

  • Kırmızı kalem oluşturur.

  • Kalemle, GDI+ DrawRectangle yöntemini kullanarak ekrana bir dikdörtgen çizer.

  • İç işaretçi türü değişkenini hdc tanımlar ve değerini tanıtıcıya formun cihaz bağlamı olarak ayarlar.

  • GDI Rectangle işlevini kullanarak ekrana bir dikdörtgen çizer.

  • parametresi tarafından temsil edilen cihaz bağlamını hdc serbest bırakır.

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

Açıklamalar

Cihaz bağlamı, bir dizi grafik nesne ve bunların ilişkili özniteliklerinin yanı sıra çıkışı etkileyen grafik modlarını tanımlayan GDI'yi temel alan Windows bir yapıdır. Bu yöntem, bir yazı tipi dışında bu cihaz bağlamını döndürür. Bir yazı tipi seçilmediğinden, yönteminden döndürülen bir tanıtıcıyı kullanarak yöntemine yapılan FromHdc çağrılar GetHdc başarısız olur.

ve GetHdc yöntemlerine yapılan ReleaseHdc çağrılar çiftler halinde görünmelidir. ve GetHdcReleaseHdc yöntem çiftinin kapsamı sırasında genellikle yalnızca GDI işlevlerine çağrı yaparsınız. Parametresini oluşturan GDI+ yöntemlerine yapılan bu kapsamdaki Graphics çağrılar hdc hatayla ObjectBusy başarısız olur. Ayrıca GDI+, sonraki işlemlerde parametresinde Graphicshdc yapılan durum değişikliklerini yoksayar.

Şunlara uygulanır