次の方法で共有


Graphics.GetHdc メソッド

この Graphics オブジェクトに関連付けられているデバイス コンテキストを識別するハンドルを取得します。

Public Function GetHdc() As IntPtr
[C#]
public IntPtr GetHdc();
[C++]
public: IntPtr GetHdc();
[JScript]
public function GetHdc() : IntPtr;

戻り値

この Graphics オブジェクトに関連付けられているデバイス コンテキストを識別するハンドル。

解説

デバイス コンテキストは、グラフィカル オブジェクトのセット、それらに関連付けられた属性、および出力に影響を与えるグラフィカル モードを定義する Windows GDI ベースの構造体です。このメソッドは、フォントの例外でそのデバイス コンテキストを返します。フォントが選択されていないため、 GetHdc メソッドから返されたハンドルを使用した Font.FromHdc メソッドの呼び出しは失敗します。

GetHdc メソッドと ReleaseHdc メソッドの呼び出しは、ペアで表示する必要があります。 GetHdc メソッドと ReleaseHdc メソッドのペアのスコープ内では、通常は GDI 関数だけを呼び出します。 hdc パラメータを生成した Graphics オブジェクトの GDI+ メソッドをこのスコープ内で呼び出すと、その呼び出しは失敗し、ObjectBusy エラーが返されます。さらに GDI+ は、以降の操作で hdc パラメータの Graphics オブジェクトに加えられる状態の変更をすべて無視します。

使用例

[Visual Basic, C#] 次の例は、Windows フォームでの使用を意図してデザインされており、 Paint イベント ハンドラのパラメータである PaintEventArgs e が必要です。この例では、Windows GDI 関数を呼び出して、GDI+ Graphics オブジェクト メソッドと同じタスクを実行します。このコードは次のアクションを実行します。

  • Windows DLL ファイル gdi32.dll の相互運用性 DllImportAttribute 属性を定義します。この DLL には、必要な GDI 関数が格納されています。
  • その DLL の Rectangle 関数を外部関数として定義します。
  • 赤いペンを作成します。
  • GDI+ DrawRectangle メソッドを使用して、このペンで画面に四角形を描画します。
  • 内部ポインタ型変数 hdc を定義し、フォームのデバイス コンテキストを識別するハンドルにこの変数の値を設定します。
  • GDI Rectangle 関数を使用して、画面に四角形を描画します。
  • hdc パラメータによって表されるデバイス コンテキストを解放します。
 
<System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")>  _
Private Shared Function Rectangle(hdc As IntPtr, _
ulCornerX As Integer, ulCornerY As Integer, lrCornerX As Integer, _
lrCornerY As Integer) As Boolean
End Function
Public Sub GetHdcForGDI(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.
Rectangle(hdc, 10, 70, 110, 120)
' Release handle to device context.
e.Graphics.ReleaseHdc(hdc)
End Sub
        
[C#] 
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern bool Rectangle(
IntPtr hdc,
int ulCornerX, int ulCornerY,
int lrCornerX, int lrCornerY);
public void GetHdcForGDI(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 = new 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);
}
        

[C++, JScript] C++ および JScript のサンプルはありません。Visual Basic および C# のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

Graphics クラス | Graphics メンバ | System.Drawing 名前空間