Compartir vía


Graphics.GetHdc Método

Definición

Obtiene el identificador del contexto del dispositivo asociado a este 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

Devoluciones

IntPtr

nativeint

Controle el contexto del dispositivo asociado a este Graphics.

Implementaciones

Ejemplos

El ejemplo de código siguiente está diseñado para su uso con Windows Forms y requiere PaintEventArgse, que es un parámetro del controlador de eventos Paint. En el ejemplo se muestra cómo llamar a una función GDI de Windows para realizar la misma tarea que un método Graphics GDI+. El código realiza las siguientes acciones:

  • Define el atributo DllImportAttribute de interoperabilidad para el archivo DLL de Windows gdi32.dll. Este archivo DLL contiene la función GDI deseada.

  • Define la función Rectangle en ese archivo DLL como externo.

  • Crea un lápiz rojo.

  • Con el lápiz, dibuja un rectángulo en la pantalla mediante el método DrawRectangle GDI+.

  • Define una variable de tipo de puntero interno hdc y establece su valor en el identificador para el contexto del dispositivo del formulario.

  • Dibuja un rectángulo en la pantalla mediante la función Rectangle GDI.

  • Libera el contexto del dispositivo representado por el parámetro 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

Comentarios

El contexto del dispositivo es una estructura de Windows basada en GDI que define un conjunto de objetos gráficos y sus atributos asociados, así como los modos gráficos que afectan a la salida. Este método devuelve ese contexto de dispositivo con la excepción de una fuente. Dado que no se selecciona una fuente, se producirá un error en las llamadas al método FromHdc mediante un identificador devuelto por el método GetHdc.

Las llamadas a los métodos GetHdc y ReleaseHdc deben aparecer en pares. Durante el ámbito de un par de métodos GetHdc y ReleaseHdc, normalmente solo se realizan llamadas a funciones GDI. Las llamadas realizadas en ese ámbito a los métodos de GDI+ de la Graphics que produjo el parámetro hdc producen un error de ObjectBusy. Además, GDI+ omite los cambios de estado realizados en el Graphics del parámetro hdc en las operaciones posteriores.

Se aplica a