ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN @ ĐỒ ÁN CUỐI KỲ MÔN:LẬP TRÌNH TRÊN WINDOW. TÊN ĐỒ ÁN:CHƯƠNG TRÌNH PAINT Giáo Viên hướng dẫn:Ngô Thanh Hùng Danh sách nhóm thực hiện: Trần Đình Đoàn 08520534 Nguyễn Viết Nguyên 08520569 Lê Đức Thông 08520598 Nguyễn Đông Nguyên 08520261 Vũ Thanh Long 08520562 Tp.HCM,ngày 14 tháng 6 năm 2010 Tp.HCM,ngày 14 tháng 6 năm 2010 1 Mục Lục A.Mở đầu. 3 B.Phần trình bày 3 I.Giới thiệu chương trình 3 II. Cấu trúc chương trình 3 1.Các thành phần của chương trình. 3 2.Chức năng của các thành phần chính 3 III.Giao diện chương trình 4 1.Form chính 4 2.Form Help 5 IV.Ý tưởng và code 5 1.Ý tưởng……………………………………………………………………5 2.Code(Class)……………………………………………………………….5 a.khung.cs…………………………………………………………… ……6 b.draw.cs……………………………………………………………………8 ……………………………………………………………………13 ……………………………………………………………………13 ………………………………………………………………14 ………………………………… 16 ………………………………….………………………….16 !! ……………………………………….17 V.Cách Sử dụng………………………………………………………………… 50 1.Thao tác cơ bản (New ,Open,Save,Chọn công cụ )…………………… 50 2.Những thao tác vẻ hình………………………………………………… 51 C.Kết luận ……………………………………………………………………… 52 2 A.Mở đầu Trong môn học lập trình C trên windows chúng tôi chon đề tài paint vì chúng tôi muốn viết chương trình chỉnh sửa ảnh với nhiều tính năng mới,giao diện đẹp,dễ sử dụng hơn so với các chương trình paint hiện tại. B.Phần Trình bày I.Giới thiệu chương trình "#$%&'()"#$*$+#',"#- ""#$'.+'/0('12'/034 5"*5*)676'$8+#',9$*5,(* :/)13,;< II. Cấu trúc của chương trình 1.Các thành phần chính. =>0 =?' =@0A ='0A =@' =?A =0' 2.Chức năng của các thành phần chính. >012B0(B00 C ' =DE+FG)*H' =I+FJ)13,(('.:13,+; =(KE+F"0,H'+LGM+L(E8 =N'+FB"#$ CN' =OE+FP00'G'1"H"H =QE+F+,"RG'1"HO =B>0S'5S05SE+F;50TEU 1?' =D = =I 3 =O =Q =S @0A =@0A? A2B*$85V(059$5W =@0A A2XY(0#1,Z[5+T55(5W1G;FEU8- '0A C\$']$,(1G-8 D('51G^_B'&_J@0A?Q9(05;5`(051 số hình vẽ hình học cơ bản,…) Đồng thời bạn có thể lựa chọn màu sắc tùy ý bạn ở @0AaF;+"R!$,(1G06 e.TextBox Sử dụng để nhập text cho công cụ vẻ text. f.Statustrip nằm ở lề dưới của chương trình.Hiển thị kích thước hình đang vẻ,tọa độ chuột và trạng thái Zoom. @' 1G1'b+"R&6#1,/$,Z = =' =cCd' =d'D5D5e' CD('51G;F9bB&6+;3-f G''g5M3-hB'K1' III.Giao diện chương trình "#$+"R'b1i&hj:&'"kl'00'XmmY @''."#$12X5 1.Form chính tên là form1 !12h(n0Z >03B0"k'0B"5# V5"0VS5O5Q ?'>0;B_"0"'FL"H'G A0"k'EF_ lEo(#'+F_'.BBo ?13B&_o"o$76'5o59$5` (0 AE+F8(0o @''FL&', 4 0?''FL8+)0)57"HEo(GB' S 2.Form Help(0pc'+F'FL IV.Ý Tưởng Chính và Code 1.Ý tưởng an0':G)'0A(E*_?B_(G"k' E''.*'."H7'"B*+;*(E* ?G)H;B_('0A;':;/ 065;F'0F+"R:E*7'"k'E ndH(^;B_+q''g'0A;':a2 k'+q''g$("k'E* dH(^B+LL(7r,*:'0A "#3"H'E* lE*+"R-:1J'HdH(+"Rs7bH '0A(+"R1q0'/0"#3*1J'('D(' H(+"#1q0'/0(7B"05'5 5'5 ('(1+n0*$:E*_l(7't +"R`0'.07b%$(H'*(E*+2k'"0 G'B*+; 2.Code 3B 70 !! M+L 5 70 ?B_(EF+q'E*U06 "k'E (Z (70Z ((;B_*B+'F(0+G'E(7' "k'E'70)(;F7\uE* ((^;B_7'F'gE*;HP0B7&b0; $'.'0)"#3 #region vẽ các điểm co dãn của khung ảnh public void vekhung(Form1 form) { Graphics g = form.panel4.CreateGraphics(); Pen a = new Pen(Color.Black, 4); x.X = form.ptmain.Location.X + form.ptmain.Size.Width / 2; x.Y = form.ptmain.Location.Y + form.ptmain.Size.Height; y.X = form.ptmain.Location.X + form.ptmain.Size.Width; y.Y = form.ptmain.Location.Y + form.ptmain.Size.Height / 2; z.X = form.ptmain.Location.X + form.ptmain.Size.Width; z.Y = form.ptmain.Location.Y + form.ptmain.Size.Height; form.Invalidate(); g.DrawLine(a, x.X + 2, x.Y + 2, x.X - 2, x.Y + 2); g.DrawLine(a, y.X + 2, y.Y + 2, y.X + 2, y.Y - 2); g.DrawLine(a, z.X + 2, z.Y + 2, z.X + 2, z.Y - 2); if (form.ptmain.Width > form.panel4.Width) { form.hScrollBar1.Visible = true; form.hScrollBar1.Maximum = form.ptmain.Width - form.panel4.Width + 115; form.hScrollBar1.LargeChange = 110; } if (form.ptmain.Height > form.panel4.Height) { form.vScrollBar1.Visible = true; form.vScrollBar1.Maximum = form.ptmain.Height - form.panel4.Height + 115; form.vScrollBar1.LargeChange = 110; } } #endregion (7'Z 6 ((;B_7'F0);iJE7\ u7&b0;$*+q'$G0) #region kiểm tra chuột co Move vào điểm co dãn nêu có thì đổi cursors public void kiemtra(object sender, MouseEventArgs e, Form1 form1) { if (e.X > (x.X - 20) && e.X < (x.X + 20) && e.Y < (x.Y + 10) && e.Y > (x.Y - 10)) { if (a == false && b == false && c == false) { a = true; form1.panel4.Cursor = System.Windows.Forms.Cursors.SizeNS; } } else if (e.Y > (y.Y - 20) && e.Y < (y.Y + 20) && e.X < (y.X + 10) && e.X > (y.X - 10)) { if (a == false && b == false && c == false) { b = true; form1.panel4.Cursor = System.Windows.Forms.Cursors.SizeWE; } } else if (e.X > z.X - 20 && e.X < z.X + 20 && e.Y < z.Y + 10 && e.Y > (z.Y - 10)) { if (a == false && b == false && c == false) { c = true; form1.panel4.Cursor = System.Windows.Forms.Cursors.SizeNWSE; } } else { form1.panel4.Cursor = System.Windows.Forms.Cursors.Default; if (form1.mousepanel4 == false) { a = false; b = false; c = false; } } } #endregion (7Z ((;B_+q'7"HE*-' 0F0)7'B+'/0+'/07'.+u+ #region khi chuột Move vào điểm co dãn và mousedows thì khéo dãn public void keo(object sender, MouseEventArgs e, Form1 form1) 7 { kiemtra(sender, e, form1); if (form1.mousepanel4 == true) { if (a == true && b == false && c == false) { form1.panel4.Cursor = System.Windows.Forms.Cursors.SizeNS; form1.ptmain.Height += e.Y - form1.ptmain.Size.Height - form1.ptmain.Location.Y; form1.panel4.Invalidate(); vekhung(form1); } if (a == false && b == true && c == false) { form1.panel4.Cursor = System.Windows.Forms.Cursors.SizeWE; form1.ptmain.Width += e.X - form1.ptmain.Size.Width - form1.ptmain.Location.X; form1.panel4.Invalidate(); vekhung(form1); } if (a == false && b == false && c == true) { form1.panel4.Cursor = System.Windows.Forms.Cursors.SizeNWSE; form1.ptmain.Width += e.X - form1.ptmain.Size.Width - form1.ptmain.Location.X; form1.ptmain.Height += e.Y - form1.ptmain.Size.Height - form1.ptmain.Location.Y; form1.panel4.Invalidate(); vekhung(form1); } } } #endregion 1 ?B_f-)E*_"k'E* "H7'+"06E*dH(G/060 _5;F+q'+"R7"H'0F+"R (Z (Z((;B_Gv06 '0A(*70'0A+;+2k'"0&'L 57"H"#306E*(1'b #region hàm tạo hình chữ nhật và picturebox vẽ public void taorectangle(object sender, MouseEventArgs e, Form1 form, pen ptmain) { if (form.mouseptmain == true) { 8 if (e.X > form.mousedownptmain.X) { poinptve.X = form.mousedownptmain.X; rec.Width = e.X - form.mousedownptmain.X; } else { poinptve.X = e.X; rec.Width = form.mousedownptmain.X - e.X; } if (e.Y > form.mousedownptmain.Y) { poinptve.Y = form.mousedownptmain.Y; rec.Height = e.Y - form.mousedownptmain.Y; } else { poinptve.Y = e.Y; rec.Height = form.mousedownptmain.Y - e.Y; } rec.Location = poinptve; poinptve.X = rec.Location.X - 5; poinptve.Y = rec.Location.Y - 5; form.ptve.Location = poinptve; form.ptve.Width = rec.Width + 10; form.ptve.Height = rec.Height + 10; Rectangle tam = new Rectangle(); Point tam2 = new Point(); tam2.X = rec.X - 5; tam2.Y = rec.Y - 5; tam.Location = tam2; tam.Width = rec.Width + 10; tam.Height = rec.Height + 10; if (rec.Width > 4 && rec.Height > 4) { form.ptve.Image = new Bitmap(form.ptve.Width, form.ptve.Height); Graphics g = Graphics.FromImage(form.ptve.Image); Pen t = new Pen(Color.Black, 2); g.DrawImage(ptmain.Image, 0, 0, tam, GraphicsUnit.Pixel); g.DrawRectangle(t, new Rectangle(0, 0, form.ptve.Width, form.ptve.Height)); g.DrawLine(t, form.ptve.Width / 2, form.ptve.Height - 3, form.ptve.Width / 2, form.ptve.Height); g.DrawLine(t, form.ptve.Width - 3, form.ptve.Height / 2, form.ptve.Width, form.ptve.Height / 2); g.DrawLine(t, form.ptve.Width - 3, form.ptve.Height - 2, form.ptve.Width, form.ptve.Height - 2); } } } #endregion (7'E+F7'F0);(EE+F7\ 9 uDb0;$+q'$G0) public void kiemtra(object sender, MouseEventArgs e, Form1 form, pen ptmain) { if (e.X > (form.ptve.Width / 2) - 5 && e.X < (form.ptve.Width / 2) + 5 && e.Y > form.ptve.Height-5) { if (a == false && b == false && c == false) { a = true; form.ptve.Cursor = System.Windows.Forms.Cursors.SizeNS; } } else if (e.Y > (form.ptve.Height / 2) - 5 && e.Y < (form.ptve.Height / 2) + 5 && e.X > (form.ptve.Width-5)) { if (a == false && b == false && c == false) { b = true; form.ptve.Cursor = System.Windows.Forms.Cursors.SizeWE; } } else if (e.X > form.ptve.Width - 5 && e.Y > form.ptve.Height - 5) { if (a == false && b == false && c == false) { c = true; form.ptve.Cursor = System.Windows.Forms.Cursors.SizeNWSE; } } else { form.ptve.Cursor = System.Windows.Forms.Cursors.Default; if (form.mouseptve == false) { a = false; b = false; c = false; } } } (7E+F+q'7"H'01(wh: 06'0A public void keo(object sender, MouseEventArgs e, Form1 form, pen ptmain) { kiemtra(sender, e, form,ptmain); Rectangle tam = new Rectangle(); Point tam2 = new Point(); tam2.X = rec.X - 5; 10 [...]... form.ptve.Location.Y ; if (form.mouseptve==true && a==false && b==false && c==false) { y.X += (e.X - form.mousedownptve.X); y.Y += (e.Y - form.mousedownptve.Y); form.ptve.Location = y; y.X=form.ptve.Location.X - form.ptmain.Location.X; y.Y=form.ptve.Location.Y - form.ptmain.Location.Y; y.X = form.ptve.Location.X + 5; y.Y = form.ptve.Location.Y + 5; rec.Location = y; Rectangle tam = new Rectangle(); Point tam2 = new... để thực hiện thao tác vẽ của người dung #region sự kiện ptmain private void sukien(pen picture) { picture.MouseDown += new MouseEventHandler(mousedown_pt); picture.MouseMove += new MouseEventHandler(mousemove_pt); picture.MouseUp += new MouseEventHandler(mouseup_pt); picture.DoubleClick += new EventHandler(doubleclick_pt); } private void mousedown_pt(object sender, MouseEventArgs e) { textBox1.Visible... ttext.Checked || tracmau.Checked) { ptve.Visible = false; pe.vehinh(this, dr.rec); } } private void mousemove_pt(object sender, MouseEventArgs e) { if ((e.X > mousedownptmain.X + 4 || e.Y > mousedownptmain.Y + 4 || e.X + 4 < mousedownptmain.X || e.Y + 4 < mousedownptmain.Y) && mouseptmain) { if (tlaymau.Checked == false && tmouse.Checked == false && tracmau.Checked == false && txoa.Checked == false) { ptve.Visible...tam2.Y = rec.Y - 5; tam.Location = tam2; tam.Width = rec.Width+ 10; tam.Height = rec.Height+ 10; if (form.mouseptve) { if (a == true && b == false && c == false) { form.ptve.Cursor = System.Windows.Forms.Cursors.SizeNS; form.ptve.Height =x.Y + (e.Y - form.mousedownptve.Y); rec.Height = form.ptve.Height-10; if (form.ptve.Width > 0 && form.ptve.Height >... if(form.ttamgiac.Checked) Name="Tam Giác"; if(form.ttamgiacvuong.Checked) if(form.tthoi.Checked) Name="Hình Thoi"; if(form.tsao4canh.Checked) Name="Sao Bốn Cánh"; if(form.tsao5canh.Checked) Name="Sao Năm Cánh"; if(form.tsao6canh.Checked) Name="Sao Sáu Cánh"; if(form.tngugiac.Checked) Name="Ngũ Giác"; if(form.tlucgiac.Checked) Name="Lục Giác"; if(form.tset.Checked) Name="Hình Tia sét"; if(form.thttron.Checked)... 2, form.ptve.Width, form.ptve.Height - 2); } } if (a == false && b == false && c == true) { form.ptve.Cursor = System.Windows.Forms.Cursors.SizeNWSE; form.ptve.Height = x.Y + (e.Y - form.mousedownptve.Y); form.ptve.Width = x.X + (e.X - form.mousedownptve.X); 11 form.ptve.Height); rec.Height = form.ptve.Height-10; rec.Width = form.ptve.Width-10; if (form.ptve.Width > 0 && form.ptve.Height > 0) { form.ptve.Image... = form.ptve.Location.Y + 5; rec.Location = y; Rectangle tam = new Rectangle(); Point tam2 = new Point(); tam2.X = rec.X - 5; tam2.Y = rec.Y - 5; tam.Location = tam2; tam.Width = rec.Width+ 10; tam.Height = rec.Height+ 10; if (form.ptve.Width > 0 && form.ptve.Height > 0) { form.ptve.Image = new Bitmap(form.ptve.Width, form.ptve.Height); Graphics g = Graphics.FromImage(form.ptve.Image); Pen t = new Pen(Color.Black,... hết các thao tác vexcuar người dùng đồng thời là lớp trung gian của các lớp khác d.Tool.cs Hàm : Hàm vekeo() có tác dụng thay đổi kích thước của pen.Image khi kích thước củ vùng vẽ chính bị thay đổi Hàm laymau() có tác dụng lấy thông số màu tại một điểm làm màu chính khi vẽ Hàm vehinh() hàm này là hàm thực hiện hầu hết các thao tác vẽ của người dùng đồng thời lưu toàn bộ các thao tác... mousemuveptmain.X = e.X; mousemuveptmain.Y = e.Y; mouse.X = e.X; mouse.Y = e.Y; pe.vehinh(this, dr.rec); } panel4.Cursor = System.Windows.Forms.Cursors.Default; toolStripStatusLabel5.Text = e.X.ToString() + "," + e.Y.ToString(); 19 } private void mouseup_pt(object sender, MouseEventArgs e) { mouseptmain = false; if (ttext.Checked || tmouse.Checked || txoa.Checked || tracmau.Checked) { pe.vehinh(this, dr.rec);... Graphics.FromImage(pe.luu.sd[pe.luu.n].saveim); f.DrawImage(image, 0, 0); pe.luu.sd[pe.luu.n].vepen = 3; pe.luu.sd[pe.luu.n].size = new Size(image.Width, image.Height); pe.luu.sd[pe.luu.n].rec = new Rectangle(0, 0, pe.Width, pe.Height); pe.luu.n ++ ; pe.n = pe.luu.n; 20 } } break; case DialogResult.No: pe.Image = new Bitmap(557, 408); pe.luu.n = 0; if (openFileDialog1.ShowDialog() == DialogResult.OK) { file = new FileInfo(openFileDialog1.FileName); . windows chúng tôi chon đề tài paint vì chúng tôi muốn viết chương trình chỉnh sửa ảnh với nhiều tính năng mới,giao diện đẹp,dễ sử dụng hơn so với các chương trình paint hiện tại. B.Phần Trình. ĐẠI HỌC CÔNG NGHỆ THÔNG TIN @ ĐỒ ÁN CUỐI KỲ MÔN:LẬP TRÌNH TRÊN WINDOW. TÊN ĐỒ ÁN:CHƯƠNG TRÌNH PAINT Giáo Viên hướng dẫn:Ngô Thanh Hùng Danh sách nhóm thực hiện: Trần Đình Đoàn 08520534 Nguyễn