一、程序介紹:
在有MDI窗體的工具條和菜單欄,并且窗體在任何大小時,要想準確獲得窗體中控件的坐標,可以使用下列代碼:
這段代碼的大體含義是在原來的窗體上的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));
二、程序中用到的典型方法介紹
1、Control.PointToScreen 方法
將指定工作區點的位置計算成屏幕坐標。
命名空間: System.Windows.Forms
程序集: System.Windows.Forms(在 system.windows.forms.dll 中)
C#語法:
public Point PointToScreen ( Point p)
參數
p:要轉換的工作區坐標 Point。
返回值:一個 Point,它表示轉換后的 Point、p(以屏幕坐標表示)。
2、Graphics.CopyFromScreen 方法 (Int32,?Int32,?Int32,?Int32,?Size)
執行顏色數據(對應于由像素組成的矩形)從屏幕到 Graphics 的繪圖圖面的位塊傳輸。
命名空間: 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:操作失敗。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。