Giáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUIGiáo trình C winform GUI
L p trình trên môi tr ng Windowsậ ườ GDI+ Tr n Duy Hoàngầ tdhoang@hcmus.edu.vn N i dungộ Gi i thi u GDI+ớ ệ Đ i t ng Graphicố ượ ● Các hàm vẽ ● Các hàm tô màu Pen Brush Invalidate T o form có hình ạ d ng b t kỳạ ấ K thu t ch ng flickerỹ ậ ố Gi i thi u GDI+ớ ệ Th c hi n v trên môi tr ng .NETự ệ ẽ ườ Cung c p t p namespace, l p h ng đ i t ng ấ ậ ớ ướ ố ượ l n cho vi c th c hi n vớ ệ ự ệ ẽ Device Context đ c thay th b ng đ i t ng ượ ế ằ ố ượ Graphic M i control đ u có đ i t ng Graphic đ v nó, ỗ ề ố ượ ể ẽ bao g m Form, Button, TextBox, …. ồ Các namespace Tên Mô tả System.Drawing Đ nh nghĩa nh ng đ i t ng v c b n ị ữ ố ượ ẽ ơ ả (Fonts, Pens, Brushes, ) và đ i t ng ố ượ Graphic System.Drawing.Drawing2D Cung c p nh ng đ i t ng v vector 2 ấ ữ ố ượ ẽ chi u nh gradient brushes, gradient ề ư pens, System.Drawing.Image Thao tác v i hình nh nh th c hi n v , ớ ả ư ự ệ ẽ l y thông tin kích th c nh, …ấ ướ ả System.Drawing.Printing Th c hi n in; cung c p nh ng đ i t ng ự ệ ấ ữ ố ượ giao tác v i printerớ System.Drawing.Text Th c hi n v v i các font.ự ệ ẽ ớ Đ i t ng Graphicố ượ Đ i t ng quan tr ng c a GDI+ố ượ ọ ủ M i thao tác v đ u th c hi n trên đ i t ng ọ ẽ ề ự ệ ố ượ Graphic M i control đ u có thu c tính Graphic dùng đ ọ ề ộ ể v chính nóẽ Có 2 cách truy xu tấ ● S ki n Paint : e.Graphics.DrawLine( )ự ệ ● Hàm CreateGraphic() nh v s m t đi khi Form ả ẽ ẽ ấ đ c Reload ượ Đ i t ng Graphicố ượ Ví dụ private void Form1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawRectangle(Pens.Blue, 10, 10, 100, 100); } Đ i t ng Graphicố ượ Danh sách các hàm vẽ Hàm Ý nghĩa DrawArc V hình cung ellipseẽ DrawEllipse V hình ellipseẽ DrawLine V đ ng th ngẽ ườ ẳ DrawPolygon V đa giácẽ DrawRectangle V hình ch nh tẽ ữ ậ DrawString V chu iẽ ổ DrawImage V hình nhẽ ả Đ i t ng Graphicố ượ Ví d :ụ // t o bút vạ ẽ Pen pen = new Pen(Color.Blue, 2); // v đ ng t đi m 0, 0 đ n 100, 100ẽ ườ ừ ể ế e.Graphics.DrawLine(pen, 0, 0, 100, 100); Đ i t ng Graphicố ượ Ví d :ụ // t o bút vạ ẽ Pen pen = new Pen(Color.Blue, 2); // v hình ellipse n m trong hình ch nh tẽ ằ ữ ậ // t đi m 0,0 có đ r ng 300, cao 200ừ ể ộ ộ e.Graphics.DrawEllipse(pen, 0, 0, 300, 200); Đ i t ng Graphicố ượ Ví d :ụ // t o bút vạ ẽ Pen pen = new Pen(Color.Blue, 2); // v cung ellipse n m trong hình ch nh tẽ ằ ữ ậ // t đi m 0,0 có đ r ng 300, cao 200ừ ể ộ ộ // v t góc 90 đ v ti p 180 đẽ ừ ộ ẽ ế ộ e.Graphics.DrawArc(pen, 0, 0, 300, 200, 90, 180); [...]... tượng Kỹ thuật chống Flicker C ch 1 : ● Trong sự kiện Load c a Form ta chèn đoạn code sau Kỹ thuật chống Flicker C ch 2 : ● ● ● Override lại sự kiện vẽ ảnh nền m c định c a Window để không th c hiện vẽ ảnh nền vì nó sẽ đư c vẽ trên MemDC Vẽ ảnh lên 1 Bitmap trư c; sau đó mới vẽ vào DC Thay vì vẽ tr c tiếp trên Device Context, ta sẽ vẽ vào 1 vùng nhớ đệm (double buffer) Khi mọi thao t c vẽ trên vùng... e.Graphics.DrawImage(image, 50, 50); Đối tượng Graphic Danh sách c c hàm tô màu Hàm Ý nghĩa FillEllipse Tô hình ellipse FillPie Tô hình bánh FillPolygon Tô đa gi c FillRectangle Tô hình chữ nhật Đối tượng Graphic Ví dụ : // Create solid brush SolidBrush blueBrush = new SolidBrush(Color.Blue); // Fill rectangle to screen e.Graphics.FillRectangle(blueBrush, 0, 0, 200, 200); Pen Dùng Pen c sẵn thông... để th c hiện vẽ lại Form ho c 1 vùng nào đó trên Form Sử dụng hàm : Invalidate private void timer1_Tick(object sender, EventArgs e) { this.Invalidate(); } Tạo form c hình dạng bất kỳ Thu c tính Region : x c định vùng hiển thị c a form Lớp GraphicsPath : dùng để tạo đường biên cho vùng hiển thị c a form Tạo form c hình dạng bất kỳ Ví dụ : // trong sự kiên form load // tạo biên cho form c hình... Point(200, 10); e.Graphics.DrawPolygon(pen, polygon); Đối tượng Graphic Ví dụ : // tạo bút vẽ Pen pen = new Pen(Color.Blue, 2); // vẽ hình bánh nằm trong hình chữ nhật // từ điểm 0,0 c độ rộng 300, cao 200 // vẽ từ g c 0 độ vẽ tiếp 90 độ e.Graphics.DrawPie(pen, 0, 0, 300, 200, 0, 90); Đối tượng Graphic Ví dụ : // tạo bút vẽ Pen pen = new Pen(Color.Blue, 2); // tạo c c điểm c a đường cong Point start... path.AddLine(300, 0, 300, 150); // tạo vùng hiển thị c a form dựa trên biên this.Region = new Region(path); Tạo form c hình dạng bất kỳ Kỹ thuật chống Flicker Khi sự kiện Paint đư c gọi, mọi đối tượng sẽ đư c vẽ tr c tiếp trên Device Context (đối tượng Graphics) Điều này sẽ gây hiện tượng flicker trong 3 trường hợp sau: ● ● ● Resize màn hình ho c user control Animation (Kĩ thuật Timer + Thay đổi tọa...Đối tượng Graphic Ví dụ : // tạo bút vẽ Pen pen = new Pen(Color.Blue, 2); // vẽ hình chữ nhật từ điểm 0,0 // c độ rộng 300, cao 200 e.Graphics.DrawRectangle(pen, 10, 10, 300, 200); Đối tượng Graphic Ví dụ : // tạo bút vẽ Pen pen = new Pen(Color.Blue, 2); // vẽ đa gi c có 4 đỉnh 10,10 100,180 // 200,180 và 200,10 Point[] polygon = new Point[4];... đường cong Point start = new Point(100, 100); Point control1 = new Point(200, 50); Point control2 = new Point(350, 100); Point end = new Point(100, 300); // vẽ đường cong e.Graphics.DrawBezier(pen, start, control1, control2, end); Đối tượng Graphic Ví dụ : // vẽ chuỗi tại vị trí 0,0 string text = "Hello world"; Font font = new Font("Arial", 16); e.Graphics.DrawString(text, font, Brushes.Blue, 0, 0); //... sự kiên form load // tạo biên cho form c hình ellipse GraphicsPath path = new GraphicsPath(); path.AddEllipse(0, 0, 300, 300); // tạo vùng hiển thị c a form dựa trên biên this.Region = new Region(path); Tạo form c hình dạng bất kỳ Tạo form c hình dạng bất kỳ Ví dụ : // tạo biên cho form GraphicsPath path = new GraphicsPath(); path.AddArc(0, 0, 300, 300, 0, 180); path.AddLine(0, 150, 0, 0); path.AddLine(0,... vẽ tr c tiếp trên Device Context, ta sẽ vẽ vào 1 vùng nhớ đệm (double buffer) Khi mọi thao t c vẽ trên vùng đệm xong, ta mới vẽ vào Device Context Kỹ thuật chống Flicker Kỹ thuật chống Flicker Kỹ thuật chống Flicker Thảo luận 02/15/11 Trần Duy Hoàng - tdhoang@fit.hcmus.edu.vn 33/10 ... Pens.AliceBlue Pens.Aqua Pens.Black Pens.Brown … Dùng Pen do tự tạo thông qua lớp Pen Pen pen = new Pen (Color.Red, 2) Brush Dùng Brush tự c ● Brushes.Lavendar ● Brushes.Ivory ● Brushes.LightBlue TextureBrush: dùng ảnh image để vẽ SolidBrush:Tạo c với màu đơn s c Brush Ví dụ : TextureBrush Bitmap image = new Bitmap("images/image1.jpg"); TextureBrush texture = new TextureBrush(image); e.Graphics.FillEllipse(texture, . L p trình trên môi tr ng Windowsậ ườ GDI+ Tr n Duy Hoàngầ tdhoang@hcmus.edu.vn N i dungộ Gi i thi u GDI+ ớ ệ Đ i t ng Graphicố ượ ● Các hàm vẽ ● Các hàm tô màu Pen Brush Invalidate T. màu Pen Brush Invalidate T o form có hình ạ d ng b t kỳạ ấ K thu t ch ng flickerỹ ậ ố Gi i thi u GDI+ ớ ệ Th c hi n v trên môi tr ng .NETự ệ ẽ ườ Cung c p t p namespace, l p h ng đ i t ng ấ. printerớ System.Drawing.Text Th c hi n v v i các font.ự ệ ẽ ớ Đ i t ng Graphicố ượ Đ i t ng quan tr ng c a GDI+ ố ượ ọ ủ M i thao tác v đ u th c hi n trên đ i t ng ọ ẽ ề ự ệ ố ượ Graphic M i control đ