LẬP TRÌNH TRÊN MÔI TRƯỜNG WINDOWS *** Dynamic Link Library & Hook
Lập trình trên môi trường Windows - GDI
-
Upload
langtubuon-ckt -
Category
Documents
-
view
114 -
download
6
description
Transcript of Lập trình trên môi trường Windows - GDI
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);
Đ 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];
polygon[0] = new Point(10, 10);
polygon[1] = new Point(100, 180);
polygon[2] = new Point(200, 180);
polygon[3] = new 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 = 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);
// v hình t i v trí 50,50ẽ ạ ị
Bitmap image = new Bitmap("images/image1.jpg");
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 qua Pensẵ● 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, 100, 100, 400, 200);
Invalidate
Hành đ ng Invalidate dù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 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, 0, 300, 0);
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 v )ượ ẽ● Drag & Drop 1 đ i 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 đ 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ỹ ậ ố
Tr n Duy Hoàng - [email protected]ầ02/15/11 33/10
Th o lu nả ậ