Ôn tập bài tập thực hành Lập trình Window

pdf 16 trang hapham 2940
Bạn đang xem tài liệu "Ôn tập bài tập thực hành Lập trình Window", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfon_tap_bai_tap_thuc_hanh_lap_trinh_window.pdf

Nội dung text: Ôn tập bài tập thực hành Lập trình Window

  1. UpdateData (false); ÔN TẬP BÀI TẬP THỰC HÀNH } LẬP TRÌNH WINDOW Bài 2: IDC_BUTTON_NHAP chọn BN_CLICKED Bài 1: IDC_EDIT_NHAP IDC_RADIO_CONG Group Box chọn Tab stop Chọn Group IDC_LIST IDC_LIST2 IDC_EDIT_A 1 IDC_EDIT_B IDC_BUTTON_PHAI chọn BN_CLICKED IDC_BUTTON_TRAI chọn IDC_STATIC_KETQUA BN_CLICKED void CBai1_2Dlg::OnButtonNhap() Radio Button IDC_BUTTON_TINH chọn BN_CLICKED { UpdateData (true); m_list1.AddString (m_nhap); m_nhap.Empty (); UpdateData(false); } void CBai1_2Dlg::OnButtonPhai() //click button chuyen du lieu qua phai { void CBai1_1Dlg::OnButtonTinh() UpdateData (true); { CString s; UpdateData (true); int i; float kq; i=m_list1.GetCurSel (); switch (m_pheptinh) m_list1.GetText (i,s); { m_list2.AddString (s); case 0: m_list1.DeleteString(i); kq=m_a + m_b; break; UpdateData (false); case 1: } kq=m_a - m_b; break; case 2: void CBai1_2Dlg::OnButtonTrai() //click button chuyen du lieu qua trai kq=m_a * m_b; break; { case 3: int j,i,tong; kq=m_a / m_b; break; CString s; } //thuc hien viec chuyen cac gia tri duoc chon qua list1 m_ketqua.Format ("%0.0f",kq); tong=m_list2.GetCount ();//tinh tong cac dong trong listcontrol
  2. for (j=0;j<tong;j++ ) void CBai1_4Dlg::OnSelendokCombo1() { { if (m_list2.GetSel(j)==1) UpdateData (true); { m_ketqua.Empty (); m_list2.GetText (j,s); int i=m_combo.GetCurSel (); m_list1.AddString (s); CString s,s1,s2; m_list2.DeleteString (j); m_combo.GetLBText (i,s); } int gt=i+1,tinh; } for(int j=1;j<=10;j++) //thuc hien xoa cac gia tri bi chuyen trong list2 { tong=m_list2.GetCount (); tinh=gt*j; for (i=0;i<tong;i++ ) s1.Format ("%.0d",j); { s2.Format ("%.0d",tinh); if (m_list2.GetSel(i)==1) m_ketqua=m_ketqua + s +" x "+ s1 +"= "+ s2 +"\n"; { } m_list2.DeleteString (i); UpdateData (false); } } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% } Bài 4: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Bài 3: IDC_RADIO_CONG chọn Group Box chọn Tab stop Group IDC_COMBO1 chọn: à CBN_SELCHANGE à CBN_SELENDOK IDC_EDIT_at IDC_EDIT_a a IDC_EDIT_b IDC_EDIT_bt Group a Box IDC_EDIT_kqt IDC_EDIT_kqa IDC_STATIC_1 chọn Group IDC_BUTTON_TINH chọn BN_CLICKED Bài này chúng ta phải khai báo thêm lớp COMPLEX Insert à New Class à - ClassType: Generic Class - Name: COMPLEX Vào ComboBox chuột phải chọn Properties à - FileName: COMPLEX.cpp Data: nhập dữ liệu vào (chọn Ctrl+Enter để xuống - Base class(es): + Derived From: CObject hàng) + As: public Trong thẻ General à Type: + DropDown: cho phép lựa chọn + nhập dữ liệu COMPLEX.h class COMPLEX : public CObject + DropList: không nhập được dữ liệu { + Simple: hiển thị giống listbox protected:
  3. double thuc; return *this; double ao; } public: //dinh nghia phuong thuc toan tu + //phuong thuc cap nhat du lieu COMPLEX COMPLEX::operator +(COMPLEX z) void SetComplex(double t,double a); { //nguyen mau phuong thuc tra ve phan thuc COMPLEX t(thuc+z.thuc,ao+z.ao); double GetThuc(); return t; //nguyen phuong thuc tra ve phan ao } double GetAo(); //dinh nghia phuong thuc toan tu - //nguyen mau phuong thuc cong hai so phuc COMPLEX COMPLEX::operator -(COMPLEX z) COMPLEX cong(COMPLEX z); { //nguyen mau phuong thuc tru hai so phuc COMPLEX t(thuc-z.thuc,ao-z.ao); COMPLEX tru(COMPLEX z); return t; //nguyen mau phuong thuc nhan hai so phuc } COMPLEX nhan(COMPLEX z); //dinh nghia phuong thuc toan tu * //nguyen mau phuong thuc chia hai so phuc COMPLEX COMPLEX::operator *(COMPLEX z) COMPLEX chia(COMPLEX z); { //nguyen mau ham tao hai tham so COMPLEX t(thuc*z.thuc,ao*z.ao); COMPLEX(double t,double a); return t; //nguyen mau ham tao khong tham so } COMPLEX(); //dinh nghia phuong thuc toan tu / //nguyen mau ham huy COMPLEX COMPLEX::operator /(COMPLEX z) virtual ~COMPLEX(); { //nguyen mau ham tao sao chep COMPLEX t(thuc/z.thuc,ao/z.ao); COMPLEX(COMPLEX& z); return t; //nguyen mau phuong thuc toan tu + } COMPLEX operator +(COMPLEX z); //dinh nghia ham tao sao chep //nguyen mau phuong thuc toan tu - COMPLEX::COMPLEX(COMPLEX& z) COMPLEX operator -(COMPLEX z); { //nguyen mau phuong thuc toan tu * thuc=z.thuc; COMPLEX operator *(COMPLEX z); ao=z.ao; //nguyen mau phuong thuc toan tu / } COMPLEX operator /(COMPLEX z); //dinh nghia ham huy //nguyen mau phuong thuc toan tu = COMPLEX::~COMPLEX() COMPLEX& operator =(COMPLEX& z); { }; } //dinh nghia ham tao khong tham so COMPLEX.cpp COMPLEX::COMPLEX() { //dinh nghia phuong thuc toan tu = thuc=0; COMPLEX& COMPLEX::operator =(COMPLEX& z) ao=0; { } thuc=z.thuc; //dinh nghia ham tao hai tham so ao=z.ao; COMPLEX::COMPLEX(double t,double a)
  4. { //dinh nghia phuong thuc tra ve phan thuc thuc=t; double COMPLEX::GetThuc() ao=a; { } return thuc; //dinh nghia phuong thuc cong hai so phuc } COMPLEX COMPLEX::cong(COMPLEX z) double COMPLEX::GetAo() { { COMPLEX t; return ao; t.thuc=thuc+z.thuc; } t.ao=ao+z.ao; return t; Viết trong Dialog chính.cpp } oid CBai2Dlg::OnButtonTinh() //dinh nghia phuong thuc tru hai so phuc { COMPLEX COMPLEX::tru(COMPLEX z) COMPLEX a,b,kq; { UpdateData(true); COMPLEX t; a.SetComplex(m_a_thuc,m_a_ao); t.thuc=thuc-z.thuc; b.SetComplex(m_b_thuc,m_b_ao); t.ao=ao-z.ao; switch (m_pheptinh) return t; { } case 0: //dinh nghia phuong thuc nhan hai so phuc kq=a+b; break; COMPLEX COMPLEX::nhan(COMPLEX z) case 1: { kq=a-b; break; COMPLEX t; case 2: t.thuc=thuc*z.thuc; kq= a*b; break; t.ao=ao*z.ao; case 3: return t; kq=a/b; break; } } //dinh nghia phuong thuc chia hai so phuc m_ketqua_thuc=kq.GetThuc(); COMPLEX COMPLEX::chia(COMPLEX z) m_ketqua_ao=kq.GetAo(); { UpdateData(false); COMPLEX t; } t.thuc=thuc/z.thuc; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% t.ao=ao/z.ao; return t; Cách tạo môt ứng dụng trong Microsoft Visual C++ } File à New àXuất hiện cửa sổ New, ta chọn thẻ Projects, sau đó chọn đủ 3 //dinh nghia phuong thuc cap nhat du lieu bước sau: void COMPLEX::SetComplex(double t,double a) { B1: Chọn MFC AppWizard(exe) //this->thuc=t; B2: Xác định thư mục chứa ứng dụng trong mục Location //this->ao=a; B3: Đặt tên cho ứng dụng trong mục Project Name àXuất hiện cửa sổ MFC thuc=t; ao=a; AppWizard àChọn Dialog Based } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  5. Bài 5: Tương tự như bài 4 chúng ta cũng khai báo thêm lớp COMPLEX Bài 6: Viết trong Dialog chính.cpp void CBai3Dlg::OnButtonNhap() { UpdateData(true); Editbox COMPLEX* p; p=new COMPLEX(m_thuc,m_ao); ds.Add(p); m_list1.AddString(p->Print()); } void CBai3Dlg::OnButtonCong() { Các nút nhớ add BN_CLICKED COMPLEX* p; COMPLEX s; for(int i=0;i<ds.GetSize();i++) { p=(COMPLEX*)ds.GetAt(i); s=s+(*p); } m_static_cong=s.Print(); List Box chọn Tap UpdateData(false); Group Box } stop Khai báo thêm lớp RATIO: RATIO.h class RATIO : public CObject IDC_EDIT_THUC IDC_EDIT_AO { private: int tuso; int mauso; public: IDC_STATIC_CONG virtual ~RATIO(); // ham huy // ham tao RATIO(); IDC_BUTTON_NHAP chọn BN_CLICKED RATIO(int a,int b); RATIO(RATIO& c); // ham tao sao chep IDC_BUTTON_CONG chọn BN_CLICKED void SetPhanSo(int a, int b); // gan gia tri phan so IDC_LIST1 // tra ve tu so va mau so List Box chọn int GetTu(); tap stop int GetMau(); // nguyen mau cac toan tu ket hop, co ban, so sach RATIO operator=(RATIO a); RATIO operator+(RATIO a); RATIO operator-(RATIO a);
  6. RATIO operator*(RATIO a); return mauso; RATIO operator/(RATIO a); } RATIO operator+=(RATIO a); RATIO RATIO::operator=(RATIO a) RATIO operator-=(RATIO a); { RATIO operator*=(RATIO a); tuso=a.tuso; RATIO operator/=(RATIO a); mauso=a.mauso; bool operator==(RATIO a); return *this; bool operator>(RATIO a); } bool operator>=(RATIO a); RATIO RATIO::operator+(RATIO a) // ham rut gon phan so: { RATIO Reduce(RATIO a); tuso=tuso*a.mauso+a.tuso*mauso; CString Print(); mauso=mauso*a.mauso; }; return Reduce(*this); } RATIO.cpp RATIO RATIO::operator-(RATIO a) ATIO::RATIO() { { tuso=tuso*a.mauso-a.tuso*mauso; tuso=mauso=0; mauso=mauso*a.mauso; } return Reduce(*this); RATIO::RATIO(int a,int b) } { RATIO RATIO::operator*(RATIO a) tuso=a; { mauso=b; tuso=tuso*a.tuso; } mauso=mauso*a.mauso; RATIO::RATIO(RATIO& c) return Reduce(*this); { } tuso=c.tuso; RATIO RATIO::operator/(RATIO a) mauso=c.mauso; { } tuso=tuso*a.mauso; RATIO:: ~RATIO() mauso=mauso*a.tuso; { return Reduce(*this); } } RATIO RATIO::operator+=(RATIO a) void RATIO::SetPhanSo(int a, int b) { { *this=a+(*this); tuso=a; return *this; mauso=b; } } RATIO RATIO::operator-=(RATIO a) int RATIO::GetTu() { { *this=a-(*this); return tuso; return *this; } } int RATIO::GetMau() RATIO RATIO::operator*=(RATIO a) { {
  7. *this=a*(*this); CString RATIO::Print() return *this; { } CString s_tuso,s_mauso,s; RATIO RATIO::operator/=(RATIO a) if(tuso>0) { { *this=a/(*this); s_tuso.Format("%d",tuso); return *this; s_mauso.Format("%d",mauso); } s=s_tuso +"/"+s_mauso; bool RATIO::operator==(RATIO a) } { else RATIO b; { b= Reduce(*this); s_tuso.Format("%d",tuso); a=Reduce(a); s_mauso.Format("%d",mauso); if((a.tuso=b.tuso)&&(a.mauso=b.mauso)) s="-"+s_tuso +"/"+s_mauso; return true; } return false; return s; } } bool RATIO::operator>(RATIO a) { Viết trong dialog chính .cpp if((((double)tuso/(double)mauso)-((double)a.tuso/(double)a.mauso))>0) void CBaitapTH_5_PhansoDlg::OnButton1() return true; { return false; UpdateData(true); } RATIO* p; bool RATIO::operator>=(RATIO a) p=new RATIO(m_tuso,m_mauso); { ds.Add(p); if(((double)tuso/(double)mauso)>=((double)tuso/(double)mauso)) m_list.AddString(p->Print()); return true; UpdateData(false); return false; } } RATIO RATIO::Reduce(RATIO p) void CBaitapTH_5_PhansoDlg::OnButton2() { { int a=abs(p.tuso); UpdateData(true); int b=abs(p.mauso); if(ds.GetSize()==0) while(a!=b) { { MessageBox("Ko co phan tu nao de tin kiem !","Thong bao"); if(a>b) } a-=b; else else { b-=a; RATIO* p; } RATIO s=(*(RATIO*)ds.GetAt(0)); p.tuso=p.tuso/a; for(int i =0;i (*p))
  8. s=(*p); int dodai; } CString s,s1,s2; m_kq_tuso=s.GetTu(); s=m_chuchay; m_kq_mauso = s.GetMau(); dodai=s.GetLength (); UpdateData(false); s1=m_chuchay.Left (dodai-1); } s2=m_chuchay.Right (1); } s.Replace (s,s1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% m_chuchay=s2+s; Bài 7: break; } UpdateData (false); IDC_CHECK1 chọn CDialog::OnTimer(nIDEvent); IDC_STATIC_CHUCHAY BN_CLICKED } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Bài 8: Group Box chọn Tap Tên menu: IDR_MENU1 Radio Button stop Viết trong BOOL CBai1_3Dlg::OnInitDialog() IDC_EDIT_HOTEN UpdateData (true); IDC_DATETIMEPICKER_NGAYDI m_chuchay="- DOC LAP - TU DO - HANH PHUC "; i=1; IDC_DATETIMEPICKER_NGAYDE IDC_BUTTON_TINHTIEN UpdateData (false); N IDC_EDIT_SONGAY void CBai1_3Dlg::OnCheck1() IDC_BUTTON_RESET { IDC_EDIT_TIENTRA UpdateData (true); IDC_LIST1 if(m_check) { SetTimer (1,100,NULL); } else { KillTimer (1); } UpdateData (false); } void CBai1_3Dlg::OnTimer(UINT nIDEvent) ControlID(s) Messages { ID_FILE_OPEN UpdateData (true); ID_FILE_EXIT COMMAND switch(nIDEvent ) ID_FILE_SAVE { IDC_BUTTON_RESET BN_CLICKED case 1: IDC_BUTTON_TINHTIEN
  9. IDC_LIST1 NM_DBLCLK m_tientra=(long)m_songay * loaiphong ();//co phuong thuc go CKhachsanDlg Serialize ham loaiphong() UpdateData (false); Khai báo thêm một lớp thông tin s1.Format ("%d",m_songay); thongtin.h s2.Format ("%.0ld",m_tientra); class Cthongtin : public CObject s3.Format ("%ld",loaiphong ()); { s4.Format ("%d/%d/%d",m_ngayden.GetDay (),m_ngayden public: .GetMonth (),m_ngayden .GetYear ()); DECLARE_SERIAL(Cthongtin) s5.Format ("%d/%d/%d",m_ngaydi.GetDay (),m_ngaydi void Serialize(CArchive& ar); .GetMonth (),m_ngaydi .GetYear ()); long mtientra; int n; int msongay; n=m_list.GetItemCount (); int mloai; m_list.InsertItem (n,m_hoten); CString mhoten,mngayden,mngaydi; m_list.SetItemText (n,1,s4); //add ngay den vao ListCtrl Cthongtin(); m_list.SetItemText (n,2,s5); //add ngay di vao ListCtrl virtual ~Cthongtin(); m_list.SetItemText (n,3,s3); //add loai phong vao ListCtrl }; m_list.SetItemText (n,4,s1); //add so ngay thue vao ListCtrl thongtin.cpp m_list.SetItemText (n,5,s2 +" " "VND"); //add tien tra vao ListCtrl void Cthongtin::Serialize(CArchive& ar) Cthongtin *p=new Cthongtin (); { p->mhoten =m_hoten; if (ar.IsStoring()) p->mngayden =s4; { // storing code p->mngaydi =s5; ar mloai =loaiphong(); } p->msongay =m_songay; else p->mtientra =m_tientra; { // loading code mArray.Add (p); ar>>mhoten>>mngayden >>mngaydi >>mloai>>msongay >>mtientra; m_reset.ShowWindow (true); } m_tinhtien.ShowWindow (false); } } Khachsan.cpp } long CKhachsanDlg::loaiphong() void CKhachsanDlg::OnButtonTinhtien() { { switch(m_loai) UpdateData (true); { CString s1,s2,s3,s4,s5; case 0: return 100000; break; if(m_ngayden >=m_ngaydi || m_hoten.IsEmpty () || m_loai ==-1) case 1: return 150000; break; MessageBox ("Chua nhap, hay chon gia tri roi? ","Thong case 2: return 200000; break; bao",MB_ICONEXCLAMATION); case 3: return 250000; break; else } { return 0; COleDateTimeSpan giatri; } giatri=m_ngaydi - m_ngayden; void CKhachsanDlg::OnFileExit() //todo:phai ep kieu du lieu ngay thang nam khi lay ra { //m_static.Format ("%d",(int)giatri.GetTotalDays ()); exit(1); m_songay=(int)giatri.GetTotalDays ();
  10. } ar.Close(); void CKhachsanDlg::OnFileOpen() f.Close (); { } CFileDialog dlg(true); } CFile f; void CKhachsanDlg::Serialize(CArchive& ar) BOOL b; { if(dlg.DoModal()==IDOK) if (ar.IsStoring()) { { // storing code b=f.Open (dlg.GetFileName (),CFile::modeRead|CFile::typeBinary); } if(b) else { { // loading code CArchive ar(&f,CArchive::load); } mArray.Serialize (ar); } Cthongtin *p; int n; void CKhachsanDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) CString s1,s2,s3; { for(int i=0;i mhoten ); (i,LVIS_SELECTED)==LVIS_SELECTED) m_list.SetItemText (n,1,p->mngayden ); { m_list.SetItemText (n,2,p->mngaydi ); m_hoten =m_list.GetItemText (i,0); s1.Format ("%d",p->mloai ); //lay gia tri ho ten tu ListCtrl va dua len Dlg s2.Format ("%d",p->msongay ); s1=m_list.GetItemText (i,1);//lay gia tri ngay den s3.Format ("%ld",p->mtientra ); s2=m_list.GetItemText (i,2);//lay gia tri ngay di m_list.SetItemText (n,3,s1); s3=m_list.GetItemText (i,3);//lay gia tri loai phong m_list.SetItemText (n,4,s2); s4=m_list.GetItemText (i,4);//lay gia tri so ngay thue m_list.SetItemText (n,5,s3+ " ""VND"); s5=m_list.GetItemText (i,5);//lay gia tri tien tra } ar.Close(); //todo: dua gia tri ngay den tu ListCtrl len Dlg }f.Close (); CString strngden; } int ngden,thden,namden; } strngden.Format ("%s",s1); void CKhachsanDlg::OnFileSave() if(strngden.GetLength ()==8) { { CFileDialog dlg(false); ngden=atoi(strngden.Left (1)); CFile f; thden=atoi(strngden.Mid (2,1)); if(dlg.DoModal ()==IDOK) namden=atoi(strngden.Right (4)); { } f.Open else (dlg.GetFileName(),CFile::modeCreate|CFile::modeWrite|CFile::typeBinary); { CArchive ar(&f,CArchive::store); if(strngden.GetLength ()==10) mArray.Serialize (ar); {
  11. ngden=atoi(strngden.Left (2)); else thden=atoi(strngden.Mid (3,2)); { namden=atoi(strngden.Right (4)); ngdi=atoi(strngdi.Left (2)); } thdi=atoi(strngdi.Mid (3,1)); else namdi=atoi(strngdi.Right (4)); if(strngden.GetLength ()==9 && strngden.Mid (1,1)=="/") } { } ngden=atoi(strngden.Left (1)); m_ngaydi.SetDate (namdi ,thdi, ngdi); thden=atoi(strngden.Mid (2,2)); //todo: dua gia loai phong len Dlg namden=atoi(strngden.Right(4)); int mgiaphong=atoi(s3); } switch(mgiaphong) else { { case 100000: m_loai =0;break; ngden=atoi(strngden.Left (2)); case 150000: m_loai =1;break; thden=atoi(strngden.Mid (3,1)); case 200000: m_loai =2;break; namden=atoi(strngden.Right (4)); case 250000: m_loai =3;break; } } } //todo: dua cac gia tri so ngay thue va tien tra len Dlg m_ngayden .SetDate (namden,thden ,ngden); m_songay=atoi(s4); //todo:: dua gia tri ngay di tu ListCtrl len Dlg m_tientra=atol(s5); CString strngdi; } int ngdi,thdi,namdi; } strngdi.Format ("%s",s2); UpdateData (false); if(strngdi.GetLength ()==8) *pResult = 0; { } ngdi=atoi(strngdi.Left (1)); void CKhachsanDlg::Reset()//add function vao nhe thdi=atoi(strngdi.Mid (2,1)); { namdi=atoi(strngdi.Right (4)); //todo: viet lenh reset noi dung, de nhap moi } m_hoten.Empty (); else m_ngayden =COleDateTime ::GetCurrentTime (); { m_ngaydi =COleDateTime ::GetCurrentTime (); if(strngdi.GetLength ()==10) m_songay=0; { m_tientra=0; ngdi=atoi(strngdi.Left (2)); m_loai=-1; thdi=atoi(strngdi.Mid (3,2)); UpdateData (false); namdi=atoi(strngdi.Right (4)); } } void CKhachsanDlg::OnButtonReset() else { if(strngdi.GetLength ()==9 && strngdi.Mid (1,1)=="/") Reset (); { m_tinhtien.ShowWindow (true); ngdi=atoi(strngdi.Left (1)); m_reset.ShowWindow (false); thdi=atoi(strngdi.Mid (2,2)); UpdateData (false); namdi=atoi(strngdi.Right(4)); } }
  12. Viết trong BOOL CKhachsanDlg::OnInitDialog() ar>>m_Old>>m_Cur>>m_Draw>>m_Color>>m_Width; UpdateData (true); } m_reset.ShowWindow (false); } m_list.InsertColumn (0,"Ho ten",LVCFMT_LEFT,120); m_list.InsertColumn(1,"Ngay bat dau",LVCFMT_LEFT,120); hinh.h m_list.InsertColumn(2,"Ngay ket thuc",LVCFMT_LEFT,120); class CHinh : public CObject m_list.InsertColumn(3,"Loai phong",LVCFMT_LEFT,100); { m_list.InsertColumn(4,"So ngay thue",LVCFMT_LEFT,120); public: m_list.InsertColumn(5,"So tien tra",LVCFMT_LEFT,120); CPoint m_Old,m_Cur; UpdateData (false); int m_Draw; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% int m_Width; COLORREF m_Color; DECLARE_SERIAL(CHinh); Cách tạo môt ứng dụng vẽ hình trong Microsoft Visual C++ void CHinh::Serialize(CArchive& ar); File à New àXuất hiện cửa sổ New, ta chọn thẻ Projects, sau đó chọn đủ 3 bước sau: CHinh(); virtual ~CHinh(); B1: Chọn MFC AppWizard(exe) }; B2: Xác định thư mục chứa ứng dụng trong mục Location B3: Đặt tên cho ứng dụng trong mục Project Name àXuất hiện cửa sổ MFC vehinhView.cpp CVehinhView::CVehinhView() AppWizard àChọn Single Document (dùng để vẽ hình) { mDraw=0; mWidth=1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% mColor =RGB(155,160,0); mBitmap.LoadBitmap (IDB_BITMAP1); } CVehinhView::~CVehinhView() Bài 9: { hinh.cpp } CHinh::CHinh() BOOL CVehinhView::PreCreateWindow(CREATESTRUCT& cs) { { } return CView::PreCreateWindow(cs); CHinh::~CHinh() } { ///////////////////////////////////////////////////////////////////////////// } // CVehinhView drawing void CHinh::Serialize(CArchive& ar) void CVehinhView::OnDraw(CDC* pDC) { { if (ar.IsStoring()) CVehinhDoc* pDoc = GetDocument(); { ASSERT_VALID(pDoc); ar mArray.GetSize ();i++) { {
  13. CHinh *p=(CHinh *)pDoc ->mArray .GetAt (i); return DoPreparePrinting(pInfo); mPen.DeleteObject (); } mPen.CreatePen (PS_SOLID,p->m_Width,p->m_Color); void CVehinhView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) CPen* pPen=pDC ->SelectObject (&mPen); { switch(p->m_Draw ) } { void CVehinhView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) case 0: { pDC ->MoveTo (p->m_Old ); } pDC ->LineTo (p->m_Cur ); ///////////////////////////////////////////////////////////////////////////// break; // CVehinhView diagnostics case 1: #ifdef _DEBUG pDC ->Rectangle (p->m_Old.x,p->m_Old.y,p->m_Cur.x,p->m_Cur.y); void CVehinhView::AssertValid() const break; { case 2: CView::AssertValid(); pDC ->Ellipse (p->m_Old.x,p->m_Old.y,p->m_Cur.x,p->m_Cur.y); } break; void CVehinhView::Dump(CDumpContext& dc) const } { pDC ->SelectObject (p); CView::Dump(dc); } } //ve hinh moi CVehinhDoc* CVehinhView::GetDocument() CBrush* pBrush=pDC ->SelectObject (&mBrush); { mPen.DeleteObject (); ASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CVehinhDoc))); mPen.CreatePen (PS_SOLID,mWidth,mColor ); return (CVehinhDoc*)m_pDocument; CPen* opPen=pDC ->SelectObject (&mPen); } switch(mDraw ) ///////////////////////////////////////////////////////////////////////////// { // CVehinhView message handlers case 0: void CVehinhView::OnLButtonDown(UINT nFlags, CPoint point) pDC ->MoveTo (mOld); { pDC ->LineTo (mCur); mOld =point; break; CView::OnLButtonDown(nFlags, point); case 1: } pDC ->Rectangle (mOld.x,mOld.y,mCur.x,mCur.y); void CVehinhView::OnMouseMove(UINT nFlags, CPoint point) break; { case 2: if(nFlags & MK_LBUTTON) pDC ->Ellipse (mOld.x,mOld.y,mCur.x,mCur.y); { break; mCur=point; } Invalidate(); pDC ->SelectObject (opPen); } pDC ->SelectObject (pBrush); } CView::OnMouseMove(nFlags, point); ///////////////////////////////////////////////////////////////////////////// } // CVehinhView printing void CVehinhView::OnLButtonUp(UINT nFlags, CPoint point) BOOL CVehinhView::OnPreparePrinting(CPrintInfo* pInfo) { { CVehinhDoc* pDoc = GetDocument();
  14. ASSERT_VALID(pDoc); mBrush.CreatePatternBrush (&mBitmap);//truyen tham bien CHinh *p; } p=new CHinh; void CVehinhView::OnButtonHatch() p->m_Old =mOld; { p->m_Cur =mCur; mBrush.DeleteObject (); p->m_Draw =mDraw; mBrush.CreateHatchBrush (HS_VERTICAL,mColor ); p->m_Width =mWidth; } p->m_Color =mColor; void CVehinhView::OnButtonSolid() pDoc->mArray .Add (p); { CView::OnLButtonUp(nFlags, point); mBrush.DeleteObject (); } mBrush.CreateSolidBrush (mColor); void CVehinhView::OnButtonDoanthang() } { mDraw=0; vehinhView.h } public: void CVehinhView::OnButtonEllip() CBrush mBrush; { CBitmap mBitmap; mDraw=2; CPoint mOld,mCur; } int mDraw; void CVehinhView::OnButtonHinhchunhat() CPen mPen; { int mWidth; mDraw=1; COLORREF mColor; } void CVehinhView::OnButtonColor() Width.cpp { BOOL CWidth::OnInitDialog() CColorDialog dlg(mColor); { CDialog::OnInitDialog(); if(dlg.DoModal ()==IDOK) m_slider.SetRange (1,10); { m_slider.SetPos (mWidth); mColor =dlg.GetColor (); m_width.Format ("%d",m_slider.GetPos ()); } UpdateData (false); } return TRUE; void CVehinhView::OnButtonWidth() } { void CWidth::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) CWidth dlg; { //mWidth la cua dlg width, mWidth la cua View m_width.Format ("%d",m_slider.GetPos ()); dlg.mWidth =mWidth; UpdateData (false); // dlg.m_width.Format ("%d",mWidth); CDialog::OnHScroll(nSBCode, nPos, pScrollBar); dlg.DoModal (); } mWidth=dlg.mWidth ; void CWidth::OnOK() } { mWidth=m_slider.GetPos (); void CVehinhView::OnButtonPattern() { CDialog::OnOK(); mBrush.DeleteObject (); }
  15. Đây là bài vẽ hình tổng hợp, có cả màu sắc, độ rộng, và cách vẽ các kiểu. Coi kỹ trong phần vehinhView Phần này chủ yếu là viết code, ít thiết kế. Chỉ thiết kế mỗi phần độ rộng (width) của nét vẽ