# ÔN TẬP BÀI TẬP THỰC HÀNH LẬP TRÌNH

Chia sẻ: Hoang Ngoc Long | Ngày: | Loại File: PDF | Số trang:16

1
715
lượt xem
311

## ÔN TẬP BÀI TẬP THỰC HÀNH LẬP TRÌNH

Mô tả tài liệu
Download Vui lòng tải xuống để xem tài liệu đầy đủ

ÔN TẬP BÀI TẬP THỰC HÀNH LẬP TRÌNH WINDOW ****************************************************** Bài 1: IDC_RADIO_CONG Chọn Group Group Box chọn Tab stop IDC_EDIT_A IDC_EDIT_B IDC_STATIC_KETQUA UpdateData (false); } Bài 2: IDC_BUTTON_NHAP chọn BN_CLICKED IDC_EDIT_NHAP IDC_LIST 1 IDC_BUTTON_PHAI chọn BN_CLICKED IDC_BUTTON_TRAI chọn BN_CLICKED IDC_LIST2 Radio Button IDC_BUTTON_TINH chọn BN_CLICKED void CBai1_1Dlg::OnButtonTinh() { UpdateData (true); float kq; switch (m_pheptinh) { case 0: kq=m_a + m_b; case 1: kq=m_a - m_b; case 2: kq=m_a * m_b; case 3: kq=m_a / m_b; } m_ketqua.Format ("%0.0f",kq); break; break; break; break; void CBai1_2Dlg::OnButtonNhap() { UpdateData (true); m_list1.AddString (m_nhap); m_nhap.Empty (); UpdateData(false); } ****************************************************** void CBai1_2Dlg::OnButtonPhai() //click button chuyen du lieu qua phai { UpdateData (true); CString s;...

Chủ đề:

Bình luận(0)

Lưu

## Nội dung Text: ÔN TẬP BÀI TẬP THỰC HÀNH LẬP TRÌNH

1. ÔN TẬP BÀI TẬP THỰC HÀNH UpdateData (false); } Bài 2: LẬP TRÌNH WINDOW ****************************************************** 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
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
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 IDC_EDIT_HOTEN Viết trong BOOL CBai1_3Dlg::OnInitDialog() UpdateData (true); IDC_DATETIMEPICKER_NGAYDI m_chuchay="- DOC LAP - TU DO - HANH PHUC "; i=1; IDC_DATETIMEPICKER_NGAYDE IDC_BUTTON_TINHTIEN N UpdateData (false); ****************************************************** IDC_EDIT_SONGAY void CBai1_3Dlg::OnCheck1() IDC_BUTTON_RESET { IDC_LIST1 IDC_EDIT_TIENTRA UpdateData (true); 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 case 1: BN_CLICKED 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>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;imngayden ); { 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
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ẽ