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
Trang 1L p trình trên môi tr ậ ườ ng Windows
GDI+
Tr n Duy Hoàng ầ
Trang 3Gi 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ó, ể ẽ
Trang 4Các namespace
(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 ớ
Trang 5Đ 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( ) ự ệ
Trang 10Đ 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);
Trang 12Point[] 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);
Trang 14Đ 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);
Trang 15Đ 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 ẽ ạ ị
Trang 17Đ 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);
Trang 18 Dùng Pen do t t o thông qua l p Penự ạ ớ
Pen pen = new Pen (Color.Red, 2)
Trang 20 Ví d : TextureBrushụ
Bitmap image = new Bitmap ( "images/image1.jpg" );
TextureBrush texture = new TextureBrush (image); e.Graphics.FillEllipse(texture, 100, 100, 400, 200);
Trang 22T 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ể ị ủ
Trang 23T 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);
Trang 24T o form có hình d ng b t kỳ ạ ạ ấ
Trang 25T 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);
Trang 26T o form có hình d ng b t kỳ ạ ạ ấ
Trang 27K 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
Trang 28K thu t ch ng Flicker ỹ ậ ố
● Trong s ki n Load c a Form ta chèn đo n code ự ệ ủ ạ sau
Trang 29K thu t ch ng Flicker ỹ ậ ố
● 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 ẽ ệ ớ ẽ
Trang 30K thu t ch ng Flicker ỹ ậ ố
Trang 31K thu t ch ng Flicker ỹ ậ ố
Trang 32K thu t ch ng Flicker ỹ ậ ố
Trang 33Th o lu n ả ậ