295
Chương 8: Đồ họa, đa phương tiện, và in ấn
g.DrawPath(Pens.Black, path);
}
g.Dispose();
}
}
Hình 8.2 Thực hiện “hit testing” với đối tượng Rectangle và GraphicsPath
Chú ý rằng hoạt động này diễn ra trực tiếp bên trong phương thức thụ lý sự kiện
MouseMove
.
Việc vẽ chỉ được thực hiện nếu phần chọn hiện tại thay đổi. Đối với một đoạn mã đơn giản,
bạn có thể làm mất hiệu lực toàn bộ form mỗi khi con trỏ chuột di chuyển vào trong hoặc ra
khỏi một vùng và thụ lý tất cả việc vẽ trong phương thức thụ lý sự kiện
Form.Paint
, nhưng
điều này dẫn đến việc phải vẽ nhiều hơn và tạo nên hiện tượng rung hình (flicker) khi toàn bộ
form được vẽ lại.
3.
3.
T o form có hình d ng tùy bi n
ạ
ạ
ế
T o form có hình d ng tùy bi n
ạ
ạ
ế
Bạn cần tạo một form hoặc điều kiểm không phải hình chữ nhật.
Tạo một đối tượng
System.Drawing.Region
có hình dạng như bạn muốn, và gán
nó vào thuộc tính
Form.Region
hoặc
Control.Region
.
Để tạo một form hoặc điều kiểm không phải hình chữ nhật, trước hết bạn cần định nghĩa hình
dạng mình muốn. Cách tiếp cận dễ nhất là sử dụng đối tượng
System.Drawing.Drawing2D.GraphicsPath
, nó có thể điều tiết bất kỳ sự kết hợp nào của các
hình ellipse, chữ nhật, và cung khép kín. Bạn có thể thêm các shape vào một đối tượng
GraphicsPath
bằng các phương thức như
AddEllipse
,
AddRectangle
, và
AddClosedCurve
. Một
khi đã hoàn tất việc định nghĩa hình dạng như mong muốn, bạn có thể tạo một đối tượng
Region
từ
GraphicsPath
này—chỉ cần trình ra
GraphicsPath
trong phương thức khởi dựng của