Bài giảng Visual C -
1Lập trình C trên WindowsKỹ thuật lập trình Visual C++ (MFC) NguyễnTri TuấnKhoa CNTT – ĐH.KHTN.Tp.HCMEmail: nttuan@ fit.hcmuns.edu.vnSpring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 2Nội dungGiới thiệu về MFCChương trình MFC đầu tiênXử lý Mouse và KeyboardXử lý menuToolbar, StatusbarCác ControlXây dựng và xử lý hộp thoại (Dialog box)Documents và Views: Scroll view, List view, Tree viewSDI – Single Document InterfaceMDI - Multi Document Interface 2Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 3Giới thiệu về MFCMFC là gì ?Một số tính năng của MFC qua từng versionCác thành phần của 1 ứng dụng trong VC++Các màn hình giao diện chính của VC++ 6Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 4Giới thiệu về MFC – MFC là gì ?Microsoft Foundation ClassLà một thư viện các lớp (class, OOP) trong ngôn ngữ Visual C++, dùng cho việc lập trình trên WindowsĐược xây dựng trên cơ sở các hàm thư viện API của WindowsVersion 6 có khoảng 200 classGiúp cho người lập trình có thể xây dựng ứng dụ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 WindowsTa vẫn có thể gọi các hàm Windows API trong MFC 3Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 5Giới thiệu về MFC – MFC là gì ?…(tt)Trong 1 ứng dụng MFC, ta thường không gọi hàm Windows API trực tiếp, mà sẽ tạo các object từ những lớp của MFC, và gọi phương thức của object đóĐa số các phương thức của MFC class có cùng tên với những hàm Windows APIMFC tạo ra một Application Framework, giúp:Thiết lập kiến trúc của ứng dụng một cách nhất quán và khoa họcChe dấu đi nhiều phần chi tiết mà Windows API đòi hỏi, giúp developer “thảnh thơi” hơnSpring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 6Giới thiệu về MFC - Một số tính năng của MFCVersion 1:Các lớp List, Array, String, Time, Date, File access,…Các lớp giao diện cơ bảnMDI, OLE 1.0Version 2:File open, savePrint preview, printingScrolling window, Splitter windowToolbar, StatusbarTruy xuất được đến các control của VBTrợ giúp theo ngữ cảnh (Context-sensitive help)DLL 4Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 7Giới thiệu về MFC - Một số tính năng của MFC…(tt)Version 2.5:Hỗ trợ ODBC (Open Database Connectivity), cho phép truy xuất đến các CSDL Access, FoxPro, SQL Server,…OLE 2.01Version 3:Hỗ trợ tab dialog (property sheet)Docking control barVersion 3.1:Hỗ trợ các control chuẩn của Windows 95ODBC level 2 with Access Jet database engineCác lớp Winsock phục vụ lập trình TCP/IPSpring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 8Giới thiệu về MFC - Một số tính năng của MFC…(tt)Version 4.0:ADO (Data Access Object)Windows 95 docking control barBổ sung thêm lớp TreeView và RichEditCác lớp đồng bộ hoá các tiểu trìnhVersion 4.2:Các lớp WinInetCác lớp ActiveX document serverCác tính năng mở rộng của ActiveX controlTăng cường một số khả năng của ODBC 5Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 9Giới thiệu về MFC - Một số tính năng của MFC…(tt)Version 6:Hỗ trợ các lớp cho những control chuẩn trong IE 4.0Hỗ trợ Dynamic HTML, cho phép tạo lập động các trang HTMLActive Document Containment, cho phép ứng dụng MFC có thể chứa các Active DocumentOLE DB và ADOSpring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 10Giới thiệu về MFC - Các thành phần của 1 ứng dụngSơ đồ biên dịch các thành phần của 1 ứng dụng trong VC++ 6Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 11Giới thiệu về MFC - Các màn hình giao diện chínhCác thành phần giao diện chính của VC++Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 12Giới thiệu về MFC - Các màn hình giao diện chính…(tt)Các thành phần giao diện chính của VC++ (run-time) 7Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 13Chương trình MFC đầu tiênỨng dụng đơn giản dùng Application FrameworkỨng dụng phức tạp hơn (Dialog-based App)Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 14Chương trình MFC đầu tiên - Ứng dụng đơn giảnTạo ứng dụngCác thành phần của chương trình 8Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 15Ứng dụng đơn giản - Tạo ứng dụngChọn menu File Æ NewChọn tab ProjectsChọn loại project “Win32 Application”Đặt tên project và xác định đường dẫn thư mục trong ô “Location”Step 1: Chọn loại ứng dụng “An empty project”Nhấn Finish để kết thúcAdd các file Hello.h và Hello.cpp vào projectChọn menu Project Æ SettingsChọn project trong cửa sổ bên tráiChọn tab GeneralChọn “Use MFC In A Shared DLL”Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 16Ứng dụng đơn giản - Tạo ứng dụng…(tt)Hello.hclass CMyApp : public CWinApp { public: virtual BOOL InitInstance (); }; class CMainWindow : public CFrameWnd { public: CMainWindow (); protected: afx_msg void OnPaint (); DECLARE_MESSAGE_MAP () }; 9Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 17Ứng dụng đơn giản - Tạo ứng dụng…(tt)Hello.cpp#include <afxwin.h> #include "Hello.h" CMyApp myApp; ///////////////////////////////////////////////////////////////////////// // CMyApp member functions BOOL CMyApp::InitInstance () { m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow (m_nCmdShow); m_pMainWnd->UpdateWindow (); return TRUE; } ///////////////////////////////////////////////////////////////////////// // CMainWindow message map and member functions BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) ON_WM_PAINT () END_MESSAGE_MAP () Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 18Ứng dụng đơn giản - Tạo ứng dụng…(tt)Hello.cpp…(tt)CMainWindow::CMainWindow () { Create (NULL, _T ("The Hello Application")); } void CMainWindow::OnPaint () { CPaintDC dc (this); CRect rect; GetClientRect (&rect); dc.DrawText (_T ("Hello, MFC"), -1, &rect, DT_SINGLELINE ¦ DT_CENTER ¦ DT_VCENTER); } 10Spring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 19Ứng dụng đơn giản - Tạo ứng dụng…(tt)Ứng dụng MFC đơn giảnSpring 2004C4W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM 20Ứng dụng đơn giản – Các thành phần của c.trìnhCWinApp: lớp chính của MFC để quản lý ứng dụng. Chứa đựng vòng lặp nhận message và phân phối message đến các cửa sổ của ứng dụngCMyApp: lớp kế thừa từ lớp CWinAppclass CMyApp : public CWinApp { public: virtual BOOL InitInstance (); }; InitInstance(): hàm khởi tạo ứng dụng, override lên hàm chuẩn của lớp CWinAppBOOL CMyApp::InitInstance () { m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow (m_nCmdShow); m_pMainWnd->UpdateWindow (); return TRUE; } [...]... CxxxDlg kế thừa từ lớp CDialog c a MFC Resource.h: header file, chứa c c hằng ID c a c c resource đư c định nghĩa trong file xxx.rc xxxDlg.cpp: c i đặt c c hàm thành phần c a lớp CxxxDlg xxx.cpp: c i đặt c c hàm thành phần c a lớp CxxxApp xxx.rc: mô tả c c resource (tài nguyên) c a ứng dụng C4 W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 29 Dialog b - ased App- C c thành phần c a... giản – C c thành phần c a c. trình…(tt) CWnd: lớp chính c a MFC để quản lý c c loại c a sổ giao diện C nhiều lớp đư c kế thừa từ lớp nà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 a sổ giao diện chính c a ứng dụng CMainWindow: lớp kế thừa từ lớp CFrameWnd class CMainWindow : public CFrameWnd { public: CMainWindow (); protected:... void CMainFrame::OnDraw (UINT nID) { m_nCurrentDraw = nID; } C4 W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 51 Xử lý menu - Thay đổi trạng thái menu C c ví dụ: Khi user chọn ch c năng vẽ Circle c n thể hiện 1 dấu check ( ) phía trư c Ch c năng Cut/Copy/Delete chỉ đư c kích hoạt khi user đánh dấu chọn 1 đoạn text Ch c năng Paste chỉ đư c kích hoạt khi clipboard kh c rỗng C ch xử... (WM_CLOSE, 0, 0); } C4 W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 48 24 Xử lý menu - Xử lý khi menu item đư c chọn…(tt) Nhóm lệnh (Command range) Là 1 nhóm menu item hoạt động theo nguyên t c “Chỉ c 1 phần tử đư c chọn tại 1 thời điểm” VD Ch c năng vẽ hình “Line / Circle / Rectangle” C ch th c xử lý ? C ch 1: map tất c xử lý c a c c menu item này vào chung 1 hàm xử lý C ch 2:... 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); CRect rect; GetClientRect (&rect); dc.DrawText (_T ("Hello, MFC"), -1, &rect, DT_SINGLELINE ¦ DT_CENTER ¦ DT_VCENTER); } C4 W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 22 11 Ứng dụng đơn giản – C c thành phần c a c. trình…(tt) Message Map:... return 0; } C4 W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 25 Chương trình MFC đầu tiên – Dialog-based App Tạo ứng dụng bằng c ch sử dụng MFC AppWizard C c thành phần c a chương trình C4 W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 26 13 Dialog-based App - Tạo ứng dụng bằng MFC AppWizard Chọn menu File New Chọn tab Projects Chọn loại project “MFC AppWizard... điều khiển c a sổ VD Minimize, Maximize, Close, … C4 W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 40 20 Xử lý menu - Tạo lập menu Thường c 2 c ch chính để tạo menu: Tạo menu ở dạng resource c a ứng dụng, và load vào khi chạy Tạo tr c tiếp bằng c c hàm khi ứng dụng đang chạy Lớp sử dụng để quản lý menu: CMenu C c hàm thành phần: CreateMenu, InsertMenu, … C4 W - VisualC++ (MFC) - Nguyen... void CMainFrame::OnDraw(UINT nID) { CMenu* pMenu = GetMenu(); pMenu->CheckMenuItem(m_nCurrentDraw,MF_UNCHECKED); m_nCurrentDraw = nID; pMenu->CheckMenuItem(m_nCurrentDraw, MF_CHECKED); } C4 W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 52 26 Xử lý menu – Ví dụ Tạo 1 ứng dụng SDI Chọn menu File New Chọn tab Projects Chọn loại project “MFC AppWizard (exe)” Đặt tên project và x c định... ? MF_CHECKED : MF_UNCHECKED); } C4 W - VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 65 Toolbar - Tạo Toolbar bằng lớp CToolBar…(tt) Thêm c c ToolTip và FlyBy text ToolTip là 1 c a sổ nhỏ chứa c u giải thích ngắn về c ng dụng c a 1 button trên ToolBar FlyBy text là 1 c u thông báo đư c hiển thị trên StatusBar khi user di chuyển mouse đến 1 button c a ToolBar C4 W - VisualC++ (MFC) -... VisualC++ (MFC) - Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 28 14 Dialog-based App - C c thành phần c a chương trình C c file chương trình: (xxx là tên project) xxx.h: header file c a file xxx.cpp, chứa khai báo lớp CxxxApp để quản lý toàn bộ ứng dụng Lớp CxxxApp kế thừa từ lớp CWinApp c a MFC xxxDlg.h: header file c a file xxxDlg.cpp, chứa khai báo lớp CxxxDlg để quản lý c a sổ Dialog giao diện c a . xxx.rcxxxDlg.cpp: c i đặt c c hàm thành phần c a lớp CxxxDlgxxx.cpp: c i đặt c c hàm thành phần c a lớp CxxxAppxxx.rc: mô tả c c resource (tài nguyên) c a. RichEdit C c lớp đồng bộ hoá c c tiểu trìnhVersion 4.2: C c lớp WinInet C c lớp ActiveX document server C c tính năng mở rộng c a ActiveX controlTăng c ờng