Поделиться через


Graphics.GetHdc Метод

Определение

Возвращает дескриптор контекста устройства, связанного с этим 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

Возвращаемое значение

IntPtr

nativeint

Обработка контекста устройства, связанного с этим Graphics.

Реализации

Примеры

Следующий пример кода предназначен для использования с Windows Forms и требует PaintEventArgse, который является параметром обработчика событий Paint. В примере показан вызов функции GDI Windows для выполнения той же задачи, что и метод GDI+ Graphics. Код выполняет следующие действия:

  • Определяет атрибут DllImportAttribute взаимодействия для gdi32.dllDLL-файла Windows. Эта библиотека DLL содержит нужную функцию GDI.

  • Определяет функцию Rectangle в этой библиотеке DLL как внешнюю.

  • Создает красное перо.

  • С помощью пера рисует прямоугольник на экран с помощью метода GDI+ DrawRectangle.

  • Определяет внутреннюю переменную типа указателя hdc и задает его значение дескриптору контексту устройства формы.

  • Рисует прямоугольник на экран с помощью функции GDI Rectangle.

  • Освобождает контекст устройства, представленный параметром 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

Комментарии

Контекст устройства — это структура Windows на основе GDI, которая определяет набор графических объектов и их связанных атрибутов, а также графические режимы, влияющие на выходные данные. Этот метод возвращает контекст устройства за исключением шрифта. Так как шрифт не выбран, вызовы метода FromHdc с помощью дескриптора, возвращаемого из метода GetHdc, завершаются сбоем.

Вызовы методов GetHdc и ReleaseHdc должны отображаться в парах. В области пары методов GetHdc и ReleaseHdc обычно выполняются только вызовы функций GDI. Вызовы в этой области, сделанные в методы GDI+ Graphics, которые вызвали сбой параметра hdc с ошибкой ObjectBusy. Кроме того, GDI+ игнорирует любые изменения состояния, внесенные в Graphics параметра hdc в последующих операциях.

Применяется к