1、程序介紹:
在有MDI窗體的工具條和菜單欄,而且窗體在任何大小時,要想準確得到窗體中控件的座標,能夠使用下列代碼:windows
這段代碼的大致含義是在原來的窗體上的pbImg(pictureBox)位置進行屏幕截圖後寫回pbImg,而屏幕任何內容的位置不能變化,讓人看不出是截圖後從新寫入的。
Bitmap CatchBmp = new Bitmap(pbImg.Width, pbImg.Height);
Graphics g = Graphics.FromImage(CatchBmp);
var screenPoint = PointToScreen(pbImg.Location);
//
//x1 = panel1.Width+panel1.Left;
//y1 = menuStrip1.Height+menuStrip1.Location.Y ;
g.CopyFromScreen(new Point(screenPoint.X + panel1.Width + panel1.Left, screenPoint.Y + menuStrip1.Height + menuStrip1.Location.Y), new Point(0, 0), new Size(pbImg.Width, pbImg.Height));ide
2、程序中用到的典型方法介紹工具
一、Control.PointToScreen 方法orm
將指定工做區點的位置計算成屏幕座標。
命名空間: System.Windows.Forms
程序集: System.Windows.Forms(在 system.windows.forms.dll 中)ip
C#語法:
public Point PointToScreen ( Point p)
參數
p:要轉換的工做區座標 Point。 it
返回值:一個 Point,它表示轉換後的 Point、p(以屏幕座標表示)。 io
二、Graphics.CopyFromScreen 方法 (Int32, Int32, Int32, Int32, Size)form
執行顏色數據(對應於由像素組成的矩形)從屏幕到 Graphics 的繪圖圖面的位塊傳輸。class
命名空間: System.Drawing
程序集: System.Drawing(位於 System.Drawing.dll)命名空間
C#語法:
public void CopyFromScreen( int sourceX, int sourceY, int destinationX, int destinationY, Size blockRegionSize)
參數
sourceX
Type: System.Int32
位於源矩形左上角的點的 x 座標。
sourceY
Type: System.Int32:位於源矩形左上角的點的 y 座標。
destinationX
Type: System.Int32:位於目標矩形左上角的點的 x 座標。
destinationY
Type: System.Int32:位於目標矩形左上角的點的 y 座標。
blockRegionSize
Type: System.Drawing.Size:要傳輸的區域大小。
異常:Win32Exception:操做失敗。