2011-06-11 40 views
2

我做了一个测试WindowForm应用程序,通过它的边界拍摄窗口的快照。但我似乎无法给予GetBounds()所需的东西。他想要的图形,但它已经包含了界限,我只希望他的观点和尺寸:使用System.Drawing.Region

private void CaptureBtn_Click(object sender, EventArgs e) 
{ 
    Region region = GetRegionByHWnd(GetForegroundWindow()); 

    Rectangle rectangle = new Rectangle(
             region.GetBounds().Location, 
             region.GetBounds().Size); 

    CaptureImage(rectangle.Location, Point.Empty, rectangle.Size); 
} 

难道这个问题之前发生的任何人,或者知道如何解决它?

回答

1

首先,Region实现了IDisposable,因此您应该将其封装在使用语句中,或者在使用它时调用Dispose。

除此之外,我们将需要看到您的代码GetRegionByHWndCaptureImage。你真的甚至需要这些代码吗?为什么someWindow.Bounds不适合你?

+0

有趣的是,你有 “someWindow.Bonds” 的例子吗?我知道桌面债券,但不知道窗口。我需要前景(活动)窗口 – user779444 2011-06-11 03:15:26

+0

[Form.Bounds](http://msdn.microsoft.com/en-us/library/system.windows.forms.control.bounds.aspx),但这只会帮助你如果你可以得到一个System.Windows.Forms.Form的引用,它看起来并不像你正在做的那样。 – 2011-06-11 05:49:12

+0

+1指出使用,许多人忘记这一点。 – 2012-08-03 08:37:48

0

也许可以帮助:RECTANGLE

我不知道你的方法,如captureimage。但是也许你需要控制的相对位置? Point to Client/Point to Screen

如果不是,请告诉您希望得到的数据和您收到的数据。

另请参阅RECT MSDN类型而不是矩形类型。

一些好文章,在这里:

http://www.codeguru.com/csharp/csharp/cs_graphics/screencaptures/article.php/c6139

http://cid-32fd2eb6551ddb56.office.live.com/self.aspx/.Public/CaptureWindow.rar?sa=170500830

http://winapi.freetechsecrets.com/win32/WIN32Capturing_an_Image.htm

问候