我已經寫一個事件處理程序方法,它附連到Paint
事件Form
(就在主窗口)的。此事件發送一個PaintEventArgs
,其中包含一個名爲Graphics
的屬性,該屬性是System.Drawing.Graphics
的一個實例。爲什麼PaintEventArgs.Graphics的行爲與Control.CreateGraphics不同?
這裏是我使用的代碼:
private void Form1_Paint(object sender, PaintEventArgs e) {
Bitmap bm = new Bitmap("fruit-dealer-full.jpg");
Graphics g1 = this.CreateGraphics();
Graphics g2 = e.Graphics;
// g1.DrawImage(bm, 0, 0, this.Width, this.Height);
// g1.DrawRectangle(
// Pens.White, 10.0f, 10.0f, this.Width - 200, this.Height - 200);
g2.DrawImage(bm, 0, 0, this.Width, this.Height);
g2.DrawRectangle(
Pens.White, 10.0f, 10.0f, this.Width - 200, this.Height - 200);
}
最終,我只是想更好地瞭解這裏發生了什麼,但具體我有以下三個問題:
- 爲什麼
g1
重繪圖像中的整個窗口,而只g2
吸引新的部分,即使我繪製之前調用g2.Clear()
? - 爲什麼,無論是與對象
Graphics
,是圖像僅在調整窗口大小的增加,而不是當它是由更小的重繪? - 如果
PaintEventArgs.Graphics
可以(或應該)不能用於繪圖,它是幹什麼用的呢?如果表單不需要重新繪製,我會想象它會阻止您創建新的實例Graphics
;我錯過了嗎?
只注意到了ResizeRedraw控制風格標誌,它可能會在一個情況下使用這樣的,但我仍然想要了解上面的內容! –