2011-06-11 35 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

問候