1 / 61

LẬP TRÌNH WINDOWS

LẬP TRÌNH WINDOWS. Giới thiệu về MFC, Visual C++ 6.0. Nội dung. • Giới thiệu về MFC • Chương trình MFC đầu tiên • Xử lý chuột và bàn phím • Message Box. Nội dung. • Giới thiệu về MFC • Chương trình MFC đầu tiên • Xử lý chuột và bàn phím • Message Box.

alyson
Download Presentation

LẬP TRÌNH WINDOWS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. LẬP TRÌNH WINDOWS Giớithiệuvề MFC, Visual C++ 6.0

  2. Nội dung • Giớithiệuvề MFC • Chươngtrình MFC đầutiên • Xửlýchuộtvàbànphím • Message Box

  3. Nội dung • Giớithiệuvề MFC • Chươngtrình MFC đầutiên • Xửlýchuộtvàbànphím • Message Box

  4. Giớithiệuvề MFC • Microsoft Foundation Class • là một thư viện các lớp (class, OOP) trong ngôn ngữVisual C++, được sử dụng để xây dựng các ứng dụng trên Windows • Được xây dựng trên cơ sở các hàm thư viện APIcủa Windows • Version 6 cókhoảng 200 class • Giúp cho người lập trình có thể xây dựng ứngdụng nhanh và ít tốn công sức hơn so với việc sửdụng đơn thuần các hàm thư viện API của Windows • Trongmộtứngdụng MFC, tasẽkhônggọitrựctiếpcáchàm Windows API màsẽtạocác object từnhữnglớpcủa MFC, sau đó gọi các hàm của object này • Ta vẫncóthểgọicáchàm Windows API trong MFC

  5. Giớithiệuvề MFC • • Đa số các phương thức của MFC class cócùngtênvớinhữnghàm Windows API • • MFC tạoramộtApplication Framework, giúp: • 􀂃Thiếtlậpkiếntrúccủaứngdụngmộtcáchnhất • quánvàkhoahọc • 􀂃 Che dấu đi nhiều phần chi tiết mà Windows API • đòi hỏi, giúp developer “thảnh thơi” hơn

  6. Cácthànhphầntrongứngdụng Visual C++

  7. Chươngtrình MFC đầutiên 􀂐Ứng dụng đơn giản dùng Application Framework 􀂐Ứng dụng phức tạp hơn (Dialog-based App)

  8. Chươngtrình MFC đầutiên – ứngdụngđơngiản 􀂐Tạoứngdụng 􀂐Các thành phần của chương trình

  9. Chươngtrình MFC đầutiên – tạoứngdụng 􀂐Chọn menu File → New 􀂐Chọn tab Projects 􀂐Chọnloại project “Win32 Application” 􀂐Đặt tên project và xác định đường dẫn thư mục trong ô “Location” 􀂐Chọnloạiứngdụng “An empty project” 􀂐Nhấn Finish để kết thúc

  10. Chươngtrình MFC đầutiên – tạoứngdụng • 􀂃 Add các file Hello.hvàHello.cppvàoproject • 􀂃 Chọn menu Project → Settings • Chọnprojecttrongcửasổbêntrái • Chọn tab General • Chọn “Use MFC In A Shared DLL”

  11. Chươngtrình MFC đầutiên – Hello.h • class CMyApp : public CWinApp • { • public: • virtual BOOL InitInstance (); • }; • class CMainWindow : public CFrameWnd • { • public: • CMainWindow (); • protected: • afx_msg void OnPaint (); • DECLARE_MESSAGE_MAP () • };

  12. Chươngtrình MFC đầutiên – Hello.cpp • #include <afxwin.h> • #include "Hello.h" • CMyAppmyApp; • ////////////////////////////////////////////////////////// • // CMyApp member functions • BOOL CMyApp::InitInstance () • { • m_pMainWnd = new CMainWindow; • m_pMainWnd->ShowWindow (m_nCmdShow); • m_pMainWnd->UpdateWindow (); • return TRUE; • } //////////////////////////////////////////////////////////

  13. Chươngtrình MFC đầutiên – Hello.cpp(tt) • // CMainWindow message map and member functions • BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) • ON_WM_PAINT () • END_MESSAGE_MAP () • CMainWindow::CMainWindow () • { • Create (NULL, _T ("The Hello Application")); • } • void CMainWindow::OnPaint () • { • CPaintDC dc (this); • CRectrect; • GetClientRect (&rect); • dc.DrawText (_T ("Hello, MFC"), -1, &rect, DT_SINGLELINE | • DT_CENTER | DT_VCENTER); • }

  14. Chươngtrình MFC đầutiên – kếtquả

  15. Chươngtrình MFC đầutiên – các class củaứngdụng

  16. Chươngtrình MFC đầutiên – cácthànhphần • CWinApp: lớp chính của MFC để quản lý ứngdụng. Chứa đựng vòng lặp nhận message và phânphối message đến các cửa sổ của ứng dụng • CMyApp: lớpkếthừatừlớpCWinApp • class CMyApp : public CWinApp { • public: • virtual BOOL InitInstance (); • };

  17. Chươngtrình MFC đầutiên – cácthànhphần • InitInstance(): hàmkhởitạoứngdụng, override lênhàmchuẩncủalớpCWinApp • BOOL CMyApp::InitInstance () { • m_pMainWnd = new CMainWindow; • m_pMainWnd->ShowWindow (m_nCmdShow); • m_pMainWnd->UpdateWindow (); • return TRUE; • }

  18. Chươngtrình MFC đầutiên – cácthànhphần • CWnd: lớp chính của MFC để quản lý các loại cửasổ giao diện. Có nhiều lớp được kế thừa từ lớpnày để quản lý các loại cửa sổ khác nhau (CTreeCtrl, CListBox, Cedit,…) • CFrameWnd: lớp kế thừa từ lớp CWnd, để quản lýcửasổgiaodiệnchínhcủaứngdụng

  19. Chươngtrình MFC đầutiên – cácthànhphần • CMainWindow: lớpkếthừatừlớpCFrameWnd • classCMainWindow : public CFrameWnd { • public: • CMainWindow (); • protected: • afx_msg void OnPaint (); • DECLARE_MESSAGE_MAP () • };

  20. Chươngtrình MFC đầutiên – cácthànhphần • CMainWindow(): hàmkhởitạocửasổgiaodiệncủaứngdụng, override lênhàmchuẩncủalớpCFrameWnd • CMainWindow::CMainWindow () { • Create (NULL, _T ("The Hello Application")); • } • OnPaint: hàm thành phần của lớp CMainWindow, đượcgọi khi cần cập nhật nội dung cửa sổ. Hàm này đượcđịnh nghĩa chồng lên hàm chuẩn của lớp CFrameWnd. • void CMainWindow::OnPaint () { • CPaintDC dc(this); • CRectrect; • GetClientRect (&rect); • dc.DrawText (_T ("Hello, MFC"), -1, &rect, DT_SINGLELINE ¦ DT_CENTER ¦ DT_VCENTER); • }

  21. Chươngtrình MFC đầutiên – cácbướcthựcthiứngdụng

  22. Chươngtrình MFC đầutiên – đăngkýlớpcửasổ

  23. Chươngtrình MFC đầutiên – tạolậpcửasổ

  24. Chươngtrình MFC đầutiên – Hàmlậpcửasổ

  25. Chươngtrình MFC đầutiên – Hàmlậpcửasổ - thamsố

  26. Chươngtrình MFC đầutiên – Hàmlậpcửasổ - cáckiểudángcửasổ

  27. Chươngtrình MFC đầutiên – Hiểnthịcửasổ

  28. Chươngtrình MFC đầutiên – Vònglặpvàxửlýthôngđiệp

  29. Chươngtrình MFC đầutiên – Message Map – Ánh xạ thông điệp • MFC dùng Message Map để liên kết các message vớinhữnghàmthànhphầncủalớpcửasổ • Ánh xạ thông điệp là bảng tương quan giữa thông điệp vàcác hàm thành phần quản lý các thông điệp đó • Ánh xạ thông điệp được khai báo như các thành phần lớpkháctrongkhaibáolớp • class CMainWindow : public CFrameWnd{ • public: • CMainWindow (); • protected: • afx_msg void OnPaint (); • DECLARE_MESSAGE_MAP () • };

  30. Chươngtrình MFC đầutiên – Message Map – Ánh xạ thông điệp • Mỗi message sẽ được xử lý bởi 1 hàm thànhphần tương ứng • Những thông điệp với tiền tố WM_XYZ sẽ được càiđặt tương ứng với hàmtheo qui tắc • WM_ được chuyển thành On • XYZ được chuyển thành chữ thường trừ ký tự đầu • Vídụ: • WM_PAINT sẽ được chuyển thành OnPaint • WM_MOUSEMOVE sẽ được chuyển thành OnMouseMove • WM_LBUTTONDOWN sẽ được chuyển thành OnLButtonDown

  31. Chươngtrình MFC đầutiên – Message Map – Ánh xạ thông điệp • class CMainWindow : public CFrameWnd { • public: • CMainWindow (); • protected: • afx_msg void OnPaint (); • afx_msg void OnLButtonDown(UINT, CPoint); • afx_msg void OnMouseMove(UINT, CPoint); • DECLARE_MESSAGE_MAP () • }; • Khaibáo • Message Map • BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) • ON_WM_PAINT () • ON_WM_LBUTTONDOWN() • END_MESSAGE_MAP () • void CMainWindow::OnPaint() { • } • void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point){ • } • Cài đặt • xửlý Message

  32. Chươngtrình MFC đầutiên – Message Map – Ánh xạ thông điệp

  33. Chươngtrình MFC đầutiên – Xửlýthêm message WM_LBUTTONDOWN • Bổ sung thêm 1 hàmthànhphầnvàokhaibáocủalớpCMainWindow: • afx_msg void OnLButtonDown(UINT nFlags, CPointpoint); • Bổ sung thêm 1 macro vàokhaibáo Message Map: • ON_WM_LBUTTONDOWN () • ĐịnhnghĩahàmthànhphầnOnLButtonDown: • void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point) • { • MessageBox("Left button clicked !", "Mouse", MB_OK); • }

  34. Tạoứngdụng MFC bằngAPPWizard • Chọn menu File → New • Chọn Tab Projects • Chọnloại project “MFC AppWizard (exe)” • Đặttên project trong ô “Project name” • Xác định đường dẫn thư mục trong “Location” • Step 1: Chọnloạiứngdụng “Single Document” • Nhấn “Next” đến “Step 4 of 6”

  35. Tạoứngdụng MFC bằngAPPWizard Chọnloại project “MFC AppWizard (EXE)”

  36. Tạoứngdụng MFC bằngAPPWizard Chọn option “Single document”

  37. Tạoứngdụng MFC bằngAPPWizard Chọn option “None”

  38. Tạoứngdụng MFC bằngAPPWizard Chọn option “Next”

  39. Tạoứngdụng MFC bằngAPPWizard Chọn option “Next”

  40. Tạoứngdụng MFC bằngAPPWizard Chọn “Finish”

  41. Xử lý thông điệp chuột

  42. Message Map vàClassWizard

  43. Hàm xử lý thông điệp chuột tương ứng • void CMouseView::OnLButtonDown(UINT nFlags, CPoint point) • { • // TODO: Add your message handler code here and/or call default • CView::OnLButtonDown(nFlags, point); • } • void CMouseView::OnLButtonUp(UINT nFlags, CPoint point) • { • // TODO: Add your message handler code here and/or call default • CView::OnLButtonUp(nFlags, point); • } • void CMouseView::OnMouseMove(UINT nFlags, CPoint point) • { • // TODO: Add your message handler code here and/or call default • CView::OnMouseMove(nFlags, point); • }

  44. Hàm xử lý thông điệp chuột tương ứng • void CMouseView::OnLButtonDown(UINT nFlags, CPoint point) • { • // TODO: Add your message handler code here and/or call default • m_nStartX = point.x; • m_nStartY = point.y; • CView::OnLButtonDown(nFlags, point); • } • void CMouseView::OnLButtonUp(UINT nFlags, CPoint point) • { • // TODO: Add your message handler code here and/or call default • CClientDC dc(this); • dc.MoveTo(m_nStartX,m_nStartY); • dc.LineTo(point.x,point.y); • CView::OnLButtonUp(nFlags, point); • }

  45. Kếtquả

  46. Hàm xử lý thông điệp chuột tương ứng • void CMouseView::OnLButtonDown(UINT nFlags, CPoint point) • { • // TODO: Add your message handler code here and/or call default • m_nStartX = point.x; • m_nStartY = point.y; • CView::OnLButtonDown(nFlags, point); • } • void CMouseView::OnMouseMove(UINT nFlags, CPoint point) • { • // TODO: Add your message handler code here and/or call default • CClientDC dc(this); • dc.MoveTo(m_nStartX,m_nStartY); • dc.LineTo(point.x,point.y); • CView::OnLButtonUp(nFlags, point); • }

  47. Kếtquả

  48. Xửlý Keyboard - Thông điệp của keyboard • WM_KEYDOWN / WM_KEYUP: phátsinhkhi 1 phím(không phải là phím hệ thống) được nhấn xuống/thả ra • Hàm xử lý tương ứng: CWnd::OnKeyDown, CWnd::OnKeyUp • wParam: virtual-key code • lParam: chứacácthông tin khác (sốlầnlặplạiphím, scan code, • extended key,…) • WM_CHAR: làkếtquảphátsinh do message WM_KEYDOWN, báo hiệu 1 ký tự in được (printedcharacter) đã được tạo ra • Hàm xử lý tương ứng: CWnd::OnChar • wParam: mã ký tự • lParam: chứacácthông tin khác (sốlầnlặplại do nhấngiữ • phím, cóphím Alt nhấnkèm,…)

  49. Xửlý Keyboard - Vídụ • Vídụ: Xửlýphímnhấn • Môtả: khi user nhấnmộtphím→hiểnthị 1 MessageBoxthôngbáo • Cácxửlýcầnthiết • WM_KEYDOWN ↔OnKeyDown • Địnhnghĩahàmxửlý message WM_KEYDOWN

  50. Xửlý Menu 􀂐 Mộtvàikháiniệm 􀂐 Tạolập menu 􀂐 Load vàhiểnthị menu 􀂐 Xử lý khi menu item được chọn 􀂐 Thay đổi trạng thái menu 􀂐 Vídụ

More Related