次の方法で共有


Graphics.ReleaseHdc メソッド

Graphics オブジェクトの GetHdc メソッドを前回呼び出したときに取得したデバイス コンテキスト ハンドルを解放します。

Public Sub ReleaseHdc( _
   ByVal hdc As IntPtr _)
[C#]
public void ReleaseHdc(IntPtrhdc);
[C++]
public: void ReleaseHdc(IntPtrhdc);
[JScript]
public function ReleaseHdc(
   hdc : IntPtr);

パラメータ

  • hdc
    Graphics オブジェクトの GetHdc メソッドを前回呼び出したときに取得したデバイス コンテキストを識別するハンドル。

戻り値

このメソッドは値を返しません。

解説

デバイス コンテキストは、グラフィカル オブジェクトのセット、それらに関連付けられた属性、および出力に影響を与えるグラフィカル モードを定義する Windows GDI ベースの構造体です。

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 名前空間