Winforms - 包含框架的窗口图像(BitBlt)

时间:2011-12-25 19:05:53

标签: winforms winapi

我在网上发现了一些抓取当前窗口并将其复制到位图中的代码。我在下面列出了相关内容。目前它复制客户区,但我也想获得框架。有没有办法解决这个问题?所以我想快照整个窗口,包括最大化按钮,控制按钮等。

// 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 */);

1 个答案:

答案 0 :(得分:3)

只需使用表单的DrawToBitmap()方法:

        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()是另一种方式,类似于你现在正在做的事情。它实际上是从屏幕复制图像,而不是要求表单将自己绘制成位图。具有相同的缺点,表格需要可见。