2017-06-12 46 views
0

嘿所以我目前正在使用這篇文章在畫布上創建矩形,並且徘徊如何讓繪製的矩形比實際記錄的矩形大2px。這是可能的,如果是這樣的話,我會如何做到這一點,一直試圖解決它現在將是真正有用的最終有一個解決方案。如何在記錄的矩形的每一邊繪製一個2px大的繪製矩形。 C#

Point startPos;  // mouse-down position 
Point currentPos; // current mouse position 
bool drawing;  // busy drawing 
List<Rectangle> rectangles = new List<Rectangle>(); // previous rectangles 

private Rectangle getRectangle() { 
    return new Rectangle(
     Math.Min(startPos.X, currentPos.X), 
     Math.Min(startPos.Y, currentPos.Y), 
     Math.Abs(startPos.X - currentPos.X), 
     Math.Abs(startPos.Y - currentPos.Y)); 
} 

private void canevas_MouseDown(object sender, MouseEventArgs e) { 
    currentPos = startPos = e.Location; 
    drawing = true; 
} 

private void canevas_MouseMove(object sender, MouseEventArgs e) { 
    currentPos = e.Location; 
    if (drawing) canevas.Invalidate(); 
} 

private void canevas_MouseUp(object sender, MouseEventArgs e) { 
    if (drawing) { 
     drawing = false; 
     var rc = getRectangle(); 
     if (rc.Width > 0 && rc.Height > 0) rectangles.Add(rc); 
     canevas.Invalidate(); 
    } 
} 

private void canevas_Paint(object sender, PaintEventArgs e) { 
    if (rectangles.Count > 0) e.Graphics.DrawRectangles(Pens.Black, rectangles.ToArray()); 
    if (drawing) e.Graphics.DrawRectangle(Pens.Red, getRectangle()); 
} 

僅供參考此代碼來自這個職位

https://stackoverflow.com/questions/4060446/how-to-draw-rectangle-on-mousedown-move-c-sharp 

回答

1

getRectangle方法,你只需要改變你的構造函數Rectangle使用的值。由於第三個參考寬度屬性,因此您將像素數加到Math.Abs(startPos.X - currentPos.X)。此後檢查if (rc.Width > 0)是無用的,原因很明顯。