2011-12-25 7 views
0

現在のウィンドウをつかみ、それをビットマップにコピーするいくつかのコードをWeb上に見つけました。私は以下の適切なビットを含んでいます。現在、クライアント領域をコピーしていますが、フレームも取得したいと考えています。そのハンドルを手に入れる方法はありますか?別の方法がある)Winforms - フレーム(BitBlt)を含むウィンドウの画像

 using (var bmp = new Bitmap(this.Width, this.Height)) { 
      this.DrawToBitmap(bmp, new Rectangle(Point.Empty, this.Size)); 
      bmp.Save("c:/temp/test.png"); 
     } 

Graphics.CopyFromScreen(:だから私は

// Capture snapshot of the form... 
if (base.IsHandleCreated) 
{ 
    // 
    // Get DC of the form... 
    IntPtr srcDc = GetDC(Handle); 

    // 
    // Create bitmap to store image of form... 
    var bmp = new Bitmap(ClientRectangle.Width, ClientRectangle.Height); 

    // 
    // Create a GDI+ context from the created bitmap... 
    using (Graphics g = Graphics.FromImage(bmp)) 
    { 
     // 
     // Copy image of form into bitmap... 
     IntPtr bmpDc = g.GetHdc(); 
     BitBlt(bmpDc, 0, 0, bmp.Width, bmp.Height, srcDc, 0, 0, 0x00CC0020 /* SRCCOPY */); 
+0

フォームのDrawToBitmap()メソッドを使用します。 –

+0

パーフェクト、私はその方法を知らなかったので、遠くに行っていた。あなたが答えとして追加するなら、私はそれを正しいものとしてマークします。 – Ian

答えて

3

ただ、フォームのDrawToBitmap()メソッドを使用するなど、ボタン、コントロールボタンを最大限に含むウィンドウ全体を、スナップショットしたいのですがあなたが今やっていることに似ています。これは実際には、ビットマップに自身を描画するフォームを要求するのではなく、画面からイメージをコピーします。同じ不利な点で、フォームを表示する必要があります。