Xem mẫu

  1. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT Các câu lệnh trong lập trình c trên win  Tập tin Vidu1.H: chứa các khai báo liên quan đến lớp Cvidu1App:  Tập tin MainFrm.H: chứa các khai báo liên quan đến lớp khung cửa sổ chính (main frame) của ứng dụng.  Tập tin Vidu1Doc.H: chứa các khai báo liên quan đến tài liệu.  Tập tin Vidu1.RC: chứa các tài nguyên liên quan đến menu, phím nóng, hộp hội thoại,…  Tập tin Vidu1.CPP: định nghĩa các hàm đã khai báo trong lớp CVidu1App, là lớp chương trình chính. I- TẠO GIAO DIỆN: 1.CÂU LỆNH TẠO VỊ TRÍ XUẤT HIỆN CỦA CỬA SỔ(viết trong miền làm việc (lop)classview->chon lop cmainfrane->precreatewindow) //BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) //{ // if( !CFrameWnd::PreCreateWindow(cs) ) // return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs int xsize =GetSystemMetrics(SM_CXSCREEN); int ysize =GetSystemMetrics(SM_CYSCREEN); cs.cx=xsize*5/10;// nằm giữa màn hình cs.cy=ysize*5/10;// nằm giữa màn hình cs.x =(xsize-cs.cx )/2; cs.y =(ysize-cs.cy )/2; //return true; Chú ý: thay vì những câu lệnh đã có sẵn trong chương trình ta ghi chép lại nên chúng ta để chúng nằm trong dấu 2 sẹt // nha. 2.LOẠI BỎ MINIMIZE VÀ MAXIMIZE(viết trong miền làm việc (lop)classview->chon lop cmainfrane->precreatewindow) { \\ chú thích: loại bỏ thu nhỏ phóng to cs.style&=~(WS_MAXIMIZEBOX); \\ chú thích: loại bỏ thu xuống thanh dưới cs.style&=~(WS_MINIMIZEBOX); //return true; } 3.KHÔNG CHO THAY ĐỔI KÍCH THƯỚC CỬA SỔ LÀM VIỆC: 1
  2. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT (viết trong miền làm việc classview->cmainfrane->precreatewindow) { cs.style&=~ WS_THICKFRAME; //return true } 4.TẠO CỬA SỔ CỰC ĐẠI KHI ỨNG DỤNG BẮT ĐẦU CHẠY: (Vào classview->cmainfrane-> têndự ánApp->initialized) -Trong câu lệnh: m_pMainWnd->ShowWindow(SW_SHOW); Đổi thành: => m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);//tao cua so cuc dai khi ung dung bat dau chay. 5. Tạo hộp thoại: B1: Vào ResourceView-> menu->tạo tên mục trên thanh menu - Trong caption: gõ tên hiển thị khi chạy chương trình. Vd: Bạn muốn tao menu thông báo thì trong caption bạn gõ: &Thongbao Khi đó kết quả hiển thị bây giờ là: Thongbao Trong đó:& là để tạo phím tắt khi chạy chương trình ta có thể bấm fím tắt cho thao tác được nhanh hơn khi chọn menu thongbao ấy bằng cách sử dụng fím ALT+T Chú ý:-Trong một menu không thể tạo phím tắt giống nhau, bạn muốn tạo phím tắt kí tự nào thì chỉ cần để “&” trước kí tự đó. Vd :t&hongbao: thì khi chạy nhấn alt+H - Địa chỉ ID lúc này đang mờ, bạn muốn nó hiện lên thì kích chuột vào pop-up để bỏ dấu check. - Ghi địa chỉ vào ID: Thí dụ như: ID_thongbao *Lưu ý: - Lúc này bạn không được tạo menu con ở dưới thanh menu bạn vừa mới tạo. - Để tạo menu con bạn kích lại vào pop-up, trên thanh menu sẽ xuất hiện menu trống để bạn tạo, bạn chỉ cần kích vào đó. - Lúc này bạn phải điền đầy đủ thông tin: + Caption là:tên Để tạo phím tắt cho menu : -> Cách 1 : dùng kí tự «& » như trên -> Cách 2 :tên\tctrl+kí tự Vd :&thôngbao\tctrl+T Kết quả xuất hiện bây giờ đó là : thôngbao ctrl+t 2
  3. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT - Chú ý : Để cho phim tắt có hiệu lực bạn vào Resources View->Accelerator-> IDR_MAINFRAME và tạo phím tắt ở đây. + ID : thì bạn đánh địa chỉ của menu vào B2 :Vào View trên thanh công cụ-> classviewzard (hoặc Ctrl+W) - Opject IDs:Chọn tên địa chỉ ID của menu vừa tạo - Messager:+ Chọn command->add…: viết câu lệnh cho menu vừa tạo bằng cách click vào nó(hoặc click edit code…), nếu bạn không muốn thay đổi tên thì bạn bấm ok. (Dùng để tạo hộp thoại) + Chọn update_command_UI: làm cho câu lệnh vô hiệu lực, hoặc có hiệu lực. pCmdUI->Enable(m_bWzd);  Nếu m_bWzd =TRUE thì menu trở nên hoạt động,  Nếu m_bWzd = FALSE có kết quả ngược lại. - Chú ý: messager: chọn UPDATE_COMMAND_UI thì edit code của nó để vô hiệu hoặc có hiệu lực cho việc hiển thị bên ngoài giao diện còn ngược lại hầu hết thì ta đều chọn COMMAND - Cú pháp tạo hộp thoại: { AfxMessageBox(“Thông báo", MB_YESNO); // hiển thị chuỗi + cả 2 command yes and no để ta chọn } Vd: AfxMessageBox(“bạn đã tạo thông báo thành công”,MB_OK); 6.Tạo thanh công cụ: =>B1:Vào insert->resource->toolbar->new - Lúc này bạn tạo thanh công cụ mới, bạn phải đặt tên địa chỉ cho thanh cộng cụ bạn vừa mới tạo bằng cách : kích chuột phải vào IDR_TOOLBAR1-> vào propertise -> đổi tên - Các nút công cụ bạn vừa tạo phải ghi địa chỉ ID cho nó bằng cách click chuột vào nó. Cách 2: ResourcesView->click chuột phải vào toolbar chọn insert.. =>B2:Vào classview->chọn m_wndtooolbar - Trong hàm protected bạn có thể thêm đối tượng ở hàm Ctoolbar vào bên dưới: Ctoolbar tên_đối tượng; 3
  4. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT Vd: Ctoolbar hi; =>B3: Vào CmainFrame -> oncreated() đổi tên như bước2. Vd:copy đoạn mã và đổi tên cho phù hợp if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } Lưu ý: - Bạn phải thay đổi các tên m_wndtoolbar => hi. Trong đó :hi là tên bạn tạo trong khai báo ở hàm ctoolbar. Và IDR_MAINFRAME phải đổi thành tên địa chỉ ID bạn đặt ở B1. Khi việc đổi tên hoàn tất bạn có thể sắp xếp thanh công cụ bằng cách: - Tìm đoạn mã sau: m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); Trong đó: DockControlBar( CControlBar *pBar, UINT nDockBarID= 0); pBar: con trỏ đối tượng toolbar nDockBarID: gtrị xác định vị trí thanh công cụ  AFX_IDW_DOCKBAR_TOP : Toolbar xếp vào phía trên vùng client cửa sổ  AFX_IDW_DOCKBAR_BOTTOM : Toolbar xếp vào phía dưới vùng client cửa sổ  AFX_IDW_DOCKBAR_LEFT : Toolbar xếp vào phía bên trái vùng client cửa sổ  AFX_IDW_DOCKBAR_RIGHT : Toolbar xếp vào phía bên phải vùng client cửa sổ Vd: hi.EnableDocking(CBRS_ALIGN_ANY); 4
  5. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&hi, AFX_IDW_DOCKBAR_BOTTOM ); 7.Thêm text vào nút toolbar : Vào cMainfram->cú pháp này được viết trong Oncreate(…) - Cú pháp: SetButtonText( int nIndex, LPCTSTR lpszText ); • nIndex: số thứ tự của nút thêm text • lpszText: chuỗi văn bản thêm vào  Xác định kích thước các nút trong toolbar và kíchước iMage SetSizes( SIZE sizeButton, SIZE sizeImage ); Ví dụ: hi.SetButtonText(0,_T("mo")); hi.SetSizes(CSize (40,36),CSize (15,14)); Trong đó: 0 là vị trí nút cần thêm text Hi : là tên thanh công cụ được tạo ở trên. 8.Tạo thanh trạng thái: B1: vào fileview->source file->MainFrm.cpp - Trong hàm “static UINT indicators[] =” bạn thêm thanh trạng thái mới. Vd: ID_INDICATOR_TG,//do người dùng đặt tên B2:khai báo vao resoure->string table-> string table ->chon hàm có ID_INDICATOR_.. rồi đặt tên cho no băng cách kích chuột phải ->new string->go tên B2:Tạo hiển thị cho cho chỉ danh: khai báo ở phía dưới trong MainFrm.cpp void CMainFrame::OnUpdateStbarnew(CCmdUI* pCmdUI) { pCmdUI->Enable(true); } Trong đó: Stbarnew do người dùng đặt. B3:Vào fileview-> Header Files-> MainFrm.h - Trong hàm protected gõ lệnh: afx_msg void OnUpdateStbarnew(CCmdUI* pCmdUI); B4: Trở lại bảng -> MainFrm.cpp: - Trong hàm BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) gõ lệnh: 5
  6. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT ON_UPDATE_COMMAND_UI(ID_INDICATOR_TG,OnUpdateStbarnew) B5: Nhấn F7 kiểm tra lỗi và nhấn F5 để chạy. II- CÁC HÀM ĐỒ HỌA: 1.Tạo đường thẳng: B1:Tạo menu hoặc thanh công cụ như đã trình bày ở trên. B2:Vào view-> classwinzar. B3:Chọn địa chỉ ID của nút công cụ vừa mới tạo ở thanh toollbar hoặc menu ->click vào command->ok->edit code và gõ lệnh: C1: - Cú pháp: CDC * pDC = GetDC();; // Khai báo thiết bị DC. • ReleaseDC(hWnd, hDC); // Giải phóng DC pDC -> LineTo(int X, int Y); pDC -> MoveToEx(int X, int Y); Vd: CDC*pDC=GetDC(); pDC->MoveTo(100,100);//tọa độ gốc pDC->LineTo(200,200);//chiều dài hình vẽ C2: Khai báo: POINT p,p1; p.x=200 ; p.y=200 ; p1.x=100 ; p1.y=100 ; CDC*pDC=GetDC(); pDC->MoveTo(p1); //tọa độ gốc pDC->LineTo(p); //chiều dài hình vẽ 2.Hình chữ nhật : (viết tượng tự như ở các bước tạo đường thẳng) => Hình chữ nhật thường : - Cú pháp : pDC -> Rectangle(int upX, int upY, int lowX, int lowY);  upX, upY: góc trên bên trái  lowX, lowY: góc dưới bên phải vd: CDC*pDC=GetDC(); pDC -> Rectangle(200,200,400,300); => Hình chữ nhật vuông: 6
  7. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT - Cú pháp: pDC-> RoundRect(int x1, int y1, int x2, int y2, int x3, int y3) vd : CDC*pDC=GetDC(); pDC-> RoundRect(200,200,400,300,50,50); 3.Hình elip(viết tượng tự như ở các bước tạo đường thẳng) - Cú pháp: pDC->Ellipse(int upX, int upY, int lowX, int lowY);  upX, upY: góc trên bên trái  lowX, lowY: góc dưới bên phải vd: CDC*pDC=GetDC(); pDC->Ellipse(400,400,600,500);//(400,200,600,400)hình tròn 4.Vẽ Pie(Hình tròn Khuyết): (viết tượng tự như ở các bước tạo đường thẳng) - Cú pháp: pDC->pie(int upX, int upY, int lowX, int lowY, int Xs, int Ys, int Xe, int Ye);  upX, upY: góc trên bên trái  lowX, lowY: góc dưới bên phải  Xs, Ys: Điểm bắt đầu cung  Xe, Ye: Điểm kết thúc cung Vd: CDC*pDC=GetDC(); pDC->Pie(100,100,200,200,150,100,200,150);// (400,200,600,400,500,100,600,300) 5.Đường Liền Kề Nhau: (viết tượng tự như ở các bước tạo đường thẳng) - Cú pháp: pDC->Polyline(POINT pt, int n);  pt: mảng chứa các điểm tọa độ  n : số lượng tọa độ vd: POINT pt[10]; { int x; int y; } 7
  8. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT pt[0].x=200; pt[0].y=300; pt[1].x=250; pt[1].y=200; pt[2].x=300; pt[2].y=300; pt[3].x=350; pt[3].y=200; pt[4].x=400; pt[4].y=300; CDC*pDC=GetDC(); pDC->Polyline(pt,5); 6.Tạo thuộc tính bút vẽ : (viết tượng tự như ở các bước tạo đường thẳng) - Cú pháp : CPen pen(int style, int width, COLOREF color); • Style: kiểu bút vẽ và có các giá trị: – PS_DASH : Gạch ngang – PS_DASHDOT : Gạch ngang chấm – PS_DASHDOTDOT : Gach ngang chấm chấm – PS_DOT : Chấm – PS_SOLID : Đường thẳng liền nét. • Width: độ dày của bút vẽ • Color: RGB(R, G, B) CPen *pPen = pDC->SelectObject(&pen) //thiết lập Vd: CPen pen(PS_SOLID,3,RGB(19,211,65)); CPen*pPen = pDC->SelectObject(&pen) ; - Chú ý: Phải đặt trước lệnh tạo đồ họa. 7.Tạo chổi quét (Tạo màu nền)// (viết tượng tự như ở các bước tạo đường thẳng) -Cú pháp:  Cbrush Brush (COLOREF color) • Color: RGB(R, G, B)  Thiết lập chổi quét :  CBrush *pBrush = pDC->SelectObject (&Brush) - Chú ý: Phải đặt trước lệnh tạo hình vẽ ý Vd: CBrush Brush(RGB(0,255,0)); 8
  9. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT CBrush*pBrush = pDC->SelectObject(&Brush); - HS_BDIAGONAL: - HS_CROSS: - HS_DIAGCROSS: - HS_FDIAGONAL: - HS_HORIZONTAL: - HS_VERTICAL: Vd: CBrush Brush(HS_VERTICAL,RGB(0,250,0)); CBrush*pBrush = pDC->SelectObject(&Brush); 8.Tạo text lên cửa sổ:(tương tự) - Cú pháp: pDC->TextOut( x, y, string, strLength); pDC-> SetTextAlign(TA_CENTER) // hàm thiết lập Trong đó:  pDC là device context của cửa sổ cần xuất.  x, y điểm bắt đầu của chuỗi ký tự trong client  string là một con trỏ trỏ đốn một chuỗi ký tự.  strLength là số ký tự trong chỗi cần xuất. Ví dụ: void CMainFrame::Ontraitim() { // TODO: Add your command handler code here CDC*pDC=GetDC(); CString str("Ban co mot trai tim tinh khuyet"); pDC->TextOut(400,100,str, str.GetLength()); pDC-> SetTextAlign(TA_CENTER) ; } 9. Thiết lập màu chữ : (Phải đặt trước lệnh tạo text.)  pDC-> SetTextColor(COLOREF color); Vd: CDC*pDC=GetDC(); pDC-> SetTextColor(RGB(250,0,0)); 9
  10. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT  Thiết lập màu nền (Phải đặt trước lệnh tạo text.)  pDC-> SetBkColor(COLOREF color) Vd: CDC*pDC=GetDC(); pDC-> SetBkColor(RGB(250,0,0)); VD:Tạo hình người viết trong mainfrm.cpp: CDC*pDC=GetDC(); pDC->Ellipse(400,100,500,200); pDC -> Rectangle(440,200,460,230);//co pDC -> Rectangle(370,228,530,400);//than pDC->Ellipse(423,125,443,133); pDC->Ellipse(463,125,483,133);//MAT pDC->MoveTo(453,140); pDC->LineTo(444,155); pDC->MoveTo(453,140);//MUI pDC->LineTo(462,155); pDC->MoveTo(444,155); pDC->LineTo(462,155); pDC->MoveTo(453,180);//MIENG pDC->LineTo(428,170); pDC->MoveTo(453,180); pDC->LineTo(473,170); pDC->MoveTo(370,228); pDC->LineTo(290,420); pDC->MoveTo(370,290);//taytrai pDC->LineTo(300,420); pDC->MoveTo(290,420); pDC->LineTo(302,420); pDC->MoveTo(530,230); pDC->LineTo(610,420); pDC->MoveTo(530,290);//tayphai pDC->LineTo(600,420); pDC->MoveTo(600,420); pDC->LineTo(611,420); 10
  11. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT pDC->MoveTo(370,400); pDC->LineTo(355,600); pDC->MoveTo(450,450); pDC->LineTo(375,600);//chan pDC->MoveTo(530,400); pDC->LineTo(545,600); pDC->MoveTo(450,450); pDC->LineTo(525,600); pDC->MoveTo(355,600); pDC->LineTo(375,600); pDC->MoveTo(525,600); pDC->LineTo(545,600); CBrush Brush(RGB(50,250,0)); CBrush *pBrush = pDC->SelectObject (&Brush); pDC->MoveTo(370,385); pDC->LineTo(530,385); pDC -> Rectangle(440,385,460,400);//thaclung pDC-> SetTextColor(RGB(0,0,0)); pDC-> SetBkColor(RGB(250,0,0)); CString str("CHAO CAC BAN!!");// tao text pDC->TextOut(400,80,str, str.GetLength()); pDC-> SetTextAlign(TA_CENTER) ; 10.Thuật vẽ Bitmap(chèn ảnh): B1:tạo menu hoặc tool B2:Tạo nguồn Bitmap trong tập tài nguyên có đuôi .rc bằng cách: Chọn file ->open->chọn đuôi .rc(trong save as chọn text)->open- >gõ lệnh tạo nguồn vào hình cần chèn. Vd: ID_BITMAP BITMAP "C:\HINH\h.bmp". ID do người dùng đặt. B3:vào classwinzard->chọn địa chỉ cần thực hiện(lớp cmainfram) ->command(kích đôi)->edit code. B4:gõ lệnh: CBitmap bm;//khai báo bm.LoadBitmap(ID_BITMAP);//nạp bitmap từ tài nguyên. CDC*pDC=GetDC(); CDC mDC; mDC.CreateCompatibleDC(pDC); //Đạt được DC của bộ nhớ sẽ chứa bitmap 11
  12. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT mDC.SelectObject(bm);// Chọn bitmap trong device context của bộ nhớ. BITMAP TT;//khai báo bm.GetObject(sizeof(TT),&TT);//nhập thông tin của bitmap pDC->BitBlt (100,300,TT.bmWidth,TT.bmHeight,&mDC,0,0,SRCCOPY); //Sao chép bitmap từ DC của bộ nhớ sang DC của cửa sổ. -Trong đó:bm,TT,mDC:do người lập trình đặt. B5: vào resouce.h định nghĩa. #define ID_BITMAP 32804 //số này không trùng với số ở phía trên. B6:chạy chương trình 11.Tạo font cho text: B1: tạo ra text đã học ở trên B2:thiết lập font:được viết trên text. CFont Font;//do ngườ lập trình đặt tên B3: gọi  Font.CreateFont để tạo ra font có thuộc tính xác định Font.CreateFont(int Height, //kích thước điểm 0, 0, 0, FW_NORMAL, // Độ dầy, có thể là FW_BOLD 0, // nếu 1 nghiêng 0, // Nếu 1 gạch dưới 0, //nếu 1 gạch ngang 0,0, 0, 0,0,“VNI-Times”); //kiểu chữ .  B4: Gọi SelectObject() cài đặt Font vào vùng client. Font.CreateFont(40,0,0,0,FW_BOLD,0,1,0,0,0,0,0,0,"VNI-Times"); CFont *pFont = (CFont *) pDC->SelectObject(&Font); SetFont(pFont);//thiết lập. Vd: void CMainFrame::Onhi() { // TODO: Add your command handler code here CDC*pDC=GetDC(); CFont f; f.CreateFont(40,0,0,0,FW_BOLD,0,1,0,0,0,0,0,0,"VNI-Times"); CFont *pFont = (CFont *) pDC->SelectObject(&f); 12
  13. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT SetFont(pFont); CString str("baïn ñaõ taïo font chöõ thaønh coâng!!"); pDC->TextOut(400,300,str, str.GetLength()); pDC-> SetTextAlign(TA_CENTER) ; } III-HÀM XỮ LÝ THÔNG ĐIỆP CHUỘT: 1).Tạo hình khi nhấn chuột: B1:tạo nút tool hoặc menu B2: vào classwinzard chọn lớp view, chọn thông điệp chuột trong messages B3:khai báo biến bằng cách kích chuột phải vào lớp view chọn Add Member Varible…gõ kiểu và biến do người lập trình đặt. Vd:tạo hình chữ nhật và đường thẳng B1:trong thông điệp chuột OnLButtonDown void CBaitap2View::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if (hinh==1) { if (lc==1) { pl.x=point.x; pl.y=point.y ; lc=2; } else { CDC*pDC=GetDC(); CBrush Brush (RGB(200,100,0)); CBrush *pBrush = pDC->SelectObject (&Brush); pDC->Rectangle(pl.x,pl.y,point.x,point.y); lc=1; } } if (hinh==2) { if (lc==1) { pl.x=point.x; 13
  14. LÊ QUANG VŨ CĐ TIN 31B KHOA:CNTT pl.y=point.y ; lc=2; } else { CDC*pDC=GetDC(); pDC->MoveTo(pl.x,pl.y); pDC->LineTo(point.x ,point.y); lc=1; } } CView::OnLButtonDown(nFlags, point); } Trong đó: Pl: khai báo Cpoint Lc:kiểu int B2: vào classview- chọn địa chỉ ID do người lập trình tạo->chọn trong lớp view- >command và gõ lệnh Vd: void CBaitap2View::Onhinhcn() { // TODO: Add your command handler code here hinh=1; } void CBaitap2View::Ondt() { // TODO: Add your command handler code here hinh=2; } B4:vào ten_du_an_view->kích vào ten_du_an_view->gõ lc=1. B3: chạy chương trình. 14
nguon tai.lieu . vn