306
Chương 8: Đồ họa, đa phương tiện, và in ấn
Ví dụ sau đây trình bày một bức hình (ở đây là logo của Windows XP) luân phiên lớn lên và
nhỏ lại trên form. Drawing logic được thực hiện trong phương thức thụ lý sự kiện
Form.Paint
,
và một
Timer
được sử dụng để làm mất hiệu lực form mỗi 10 mili-giây để bức hình có thể
được vẽ lại. Người dùng có thể kích hoạt “double buffering” thông qua một
CheckBox
trên
form. Nếu không có “double buffering”, form bị rung đáng kể. Tuy nhiên, khi “double
buffering” được kích hoạt, bức hình lớn lên và nhỏ lại một cách mượt mà, không còn độ rung
nữa.
using System;
using System.Drawing;
using System.Drawing2D;
using System.Windows.Forms;
public class DoubleBuffering : System.Windows.Forms.Form {
private System.Windows.Forms.CheckBox chkUseDoubleBuffering;
private System.Windows.Forms.Timer tmrRefresh;
// (Bỏ qua phần mã designer.)
// Theo dõi kích thước bức hình,
// và kiểu animation (lớn lên hoặc nhỏ lại).
private bool isShrinking = false;
private int imageSize = 0;
// Lưu trữ logo sẽ được vẽ lên form.
private Image image;
private void DoubleBuffering_Load(object sender,
System.EventArgs e) {
// Nạp bức hình logo từ file.
image = Image.FromFile("image.bmp");
// Khởi động Timer để làm mất hiệu lực form.
tmrRefresh.Start();
}
private void tmrRefresh_Tick(object sender, System.EventArgs e) {