Bài giảng Visual C
1LLậập trp trìình trên môi trưnh trên môi trườờng Windowsng WindowsKKỸỸTHUTHUẬẬT LT LẬẬP TRÌNH VISUAL C++ P TRÌNH VISUAL C++ (MFC)(MFC)NNộội dung tri dung trìình bnh bààyy••GiGiớới thii thiệệu vu vềề MFC MFC••Chương trChương trìình MFC đnh MFC đầầu tiênu tiên••XXửửlý Mouse vlý Mouse vààKeyboardKeyboard••MMộột st sốốllớớp thưp thườờng gng gặặp: CWnd, CString, p: CWnd, CString, ••CCáác control thưc control thườờng gng gặặpp••CCáác dialog thưc dialog thườờng gng gặặpp••XXửửlý menulý menu 2GiGiớới thii thiệệu vu vềềMFCMFC••MFC lMFC lààggìì??••MMộột st sốốttíính năng cnh năng củủa MFC qua ta MFC qua từừng versionng version••CCáác thc thàành phnh phầần cn củủa 1 a 1 ứứng dng dụụng trong VC++ng trong VC++GiGiớới thii thiệệu vu vềềMFCMFCMFC lMFC lààggìì??••LLààmmộột thư vit thư việện cn cáác lc lớớp hưp hướớng đng đốối tưi tượợng dng dùùng cho ving cho việệc lc lậập trp trìình trên nh trên Windows.Windows.••ĐưĐượợc xây dc xây dựựng trên cơ sng trên cơ sởởccáác hc hààm thư vim thư việện API cn API củủa Windowsa Windows••Version 6 cVersion 6 cóókhokhoảảng 200 lng 200 lớớpp••GiGiúúp cho ngưp cho ngườời li lậập trp trìình cnh cóóththểểxây dxây dựựng ng ứứng dng dụụng nhanh vng nhanh vààíít tt tốốn n công scông sứức hơn so vc hơn so vớới vii việệc sc sửửddụụng đơn thung đơn thuầần cn cáác hc hààm thư vim thư việện API n API ccủủa Windowsa Windows••Ta vTa vẫẫn cn cóóththểểggọọi ci cáác hc hààm Windows API trong cm Windows API trong cáác c ứứng dng dụụng MFCng MFC 3GiGiớới thii thiệệu vu vềềMFCMFCMFC lMFC lààggìì??••Trong 1 Trong 1 ứứng dng dụụng MFC, ng MFC, ta thưta thườờng không gng không gọọi hi hààm m Windows API trWindows API trựực tic tiếếp, mp, mààssẽẽttạạo co cáác đc đốối tưi tượợng tng từừnhnhữững ng llớớp cp củủa MFC, va MFC, vààggọọi phương thi phương thứức cc củủa đa đốối tưi tượợng đng đóó••Đa sĐa sốốccáác phương thc phương thứức cc củủa nha nhữững lng lớớp MFC cp MFC cóóccùùng tên ng tên vvớới nhi nhữững hng hààm Windows APIm Windows API••MFC tMFC tạạo ra mo ra mộột Application Framework, git Application Framework, giúúp: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ọc– Che dấu đi nhiều phần chi tiết mà Windows API đòi hỏi, giúp lập trình viên “thảnh thơi” hơnGiGiớới thii thiệệu vu vềềMFCMFCMMộột st sốốttíính năng cnh năng củủa MFCa MFC••Version 1:Version 1:– Các lớp List, Array, String, Time, Date, File access,…– Các lớp giao diện cơ bản– MDI, OLE 1.0••Version 2:Version 2:– File open, save– Print preview, printing– Scrolling window, Splitter window– Toolbar, Statusbar– Truy xuất được đến các control của VB– Trợ giúp theo ngữ cảnh (Context-sensitive help)– DLL 4GiGiớới thii thiệệu vu vềềMFCMFCMMộột st sốốttíính năng cnh năng củủa MFCa MFC••Version 2.5: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.01••Version 3:Version 3:– Hỗ trợ tab dialog (property sheet)– Docking control bar••Version 3.1:Version 3.1:– Hỗ trợ các control chuẩn của Windows 95– ODBC level 2 with Access Jet database engine– Các lớp Winsock phục vụ lập trình TCP/IPGiGiớới thii thiệệu vu vềềMFCMFCMMộột st sốốttíính năng cnh năng củủa MFCa MFC••Version 4.0:Version 4.0:– ADO (Data Access Object)– Windows 95 docking control bar– Bổ sung thêm lớp TreeView và RichEdit– Các lớp đồng bộ hoá các tiểu trình••Version 4.2:Version 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 control– Tăng cường một số khả năng của ODBC 5GiGiớới thii thiệệu vu vềềMFCMFCMMộột st sốốttíính năng cnh năng củủa MFCa MFC••Version 6:Version 6:– Hỗ trợ các lớp cho những control chuẩn trong IE 4.0– Hỗ trợ Dynamic HTML, cho phép tạo lập động các trang HTML– Active Document Containment, cho phép ứng dụng MFC có thể chứa các Active Document– OLE DB và ADOGiGiớới thii thiệệuuCCáác thc thàành phnh phầần cn củủa 1 a 1 ứứng dng dụụngng 6Chương trChương trìình MFC đnh MFC đầầu tiênu tiên••TTạạo o ứứng dng dụụng bng bằằng cng cáách sch sửửddụụng MFC ng MFC AppWizardAppWizard••CCáác thc thàành phnh phầần cn củủa chương tra chương trììnhnhChương trChương trìình MFC đnh MFC đầầu tiênu tiênTTạạo o ứứng dng dụụng bng bằằng MFC AppWizardng MFC AppWizardVisual Studio 6.0 7Chương trChương trìình MFC đnh MFC đầầu tiênu tiênTTạạo o ứứng dng dụụng bng bằằng MFC AppWizardng MFC AppWizardVisual Studio 2005Chương trChương trìình MFC đnh MFC đầầu tiênu tiênTTạạo o ứứng dng dụụng bng bằằng MFC AppWizardng MFC AppWizardVisual Studio 6.0 8Chương trChương trìình MFC đnh MFC đầầu tiênu tiênTTạạo o ứứng dng dụụng bng bằằng MFC AppWizardng MFC AppWizardVisual Studio 2005Chương trChương trìình MFC đnh MFC đầầu tiênu tiênCCáác thc thàành phnh phầần cn củủa chương tra chương trììnhnh••CCáác file chương trc file chương trìình: (xxx lnh: (xxx lààtên project)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 ứng dụng. Lớp 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 9Chương trChương trìình MFC đnh MFC đầầu tiênu tiênCCáác thc thàành phnh phầần cn củủa chương tra chương trììnhnhVisual Studio 6.0 Visual Studio 2005Chương trChương trìình MFC đnh MFC đầầu tiênu tiênCCáác thc thàành phnh phầần cn củủa chương tra chương trììnhnh••CWinApp: lCWinApp: lớớp chp chíính cnh củủa MFC đa MFC đểểququảản lý n lý ứứng dng dụụng. Chng. Chứứa đa đựựng vòng lng vòng lặặp p nhnhậận message vn message vààphân phphân phốối message đi message đếến cn cáác cc cửửa sa sổổccủủa a ứứng dng dụụngng••CDemoApp: lCDemoApp: lớớp kp kếếththừừa ta từừllớớp CWinApp.p CWinApp.class CMFC01App : public CWinAppclass CMFC01App : public CWinApp{{public:public:CMFC01App();CMFC01App();// Overrides// Overridespublic:public:virtual BOOL InitInstance();virtual BOOL InitInstance();// Implementation// ImplementationDECLARE_MESSAGE_MAP()DECLARE_MESSAGE_MAP()};}; 10Chương trChương trìình MFC đnh MFC đầầu tiênu tiênCCáác thc thàành phnh phầần cn củủa chương tra chương trììnhnh••InitInstance(): hInitInstance(): hààm khm khởởi ti tạạo o ứứng dng dụụng, override lên hng, override lên hààm chum chuẩẩn cn củủa la lớớp p CWinAppCWinAppBOOL BOOL CxxxAppCxxxApp::::InitInstanceInitInstance()(){{CDemoDlg dlg;CDemoDlg dlg;m_pMainWnd = &dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();int nResponse = dlg.DoModal();if (nResponse == IDOK)if (nResponse == IDOK){{// TODO: Place code here to handle when the dialog is dismissed // TODO: Place code here to handle when the dialog is dismissed with OKwith OK}}else if (nResponse == IDCANCEL)else if (nResponse == IDCANCEL){{}}// Since the dialog has been closed, return FALSE so that we exi// Since the dialog has been closed, return FALSE so that we exit thet the// application, rather than start the application's message pum// application, rather than start the application's message pump.p.return FALSEreturn FALSE;;}}Chương trChương trìình MFC đnh MFC đầầu tiênu tiênCCáác thc thàành phnh phầần cn củủa chương tra chương trììnhnh••CWnd: lCWnd: lớớp chp chíính cnh củủa MFC đa MFC đểểququảản lý cn lý cáác loc loạại ci cửửa a ssổổgiao digiao diệện. Cn. Cóónhinhiềều lu lớớp đưp đượợc kc kếếththừừa ta từừllớớp p nnàày đy đểểququảản lý cn lý cáác loc loạại ci cửửa sa sổổkhkháác nhau c nhau (CTreeCtrl, CListBox, CEdit,(CTreeCtrl, CListBox, CEdit,……))••CDialog kCDialog kếếththừừa ta từừllớớp CWnd, lp CWnd, lààllớớp cơ bp cơ bảản đưn đượợc c ddùùng đng đểểhihiểển thn thịịccáác dialog trên mc dialog trên mààn hn hìình.nh. [...]... về con trỏ CWnd c a control đang đư c nhận t c động – Ví dụ: CWnd* pWnd; pWnd = this->GetFocus(); C c hàm c bản c a lớp CWnd hà bả c lớ Hàm CWnd::SetFocus CWnd* SetFocus( ); – Đặt focus cho một đối tượng c a sổ – Trả về con trỏ CWnd* c a c a sổ nhận focus trư c đó – Ví dụ: CWnd* pWnd; pWnd = GetDlgItem(IDC_EDIT1); pWnd->SetFocus(); 26 C c hàm c bản c a lớp CWnd hà bả c lớ Hàm CWnd::GetClientRect... void GetClientRect (LPRECT lpRect) const; – X c định toạ độ c a hình chữ nhật bao quanh c a sổ – Ví dụ : CRect rect; pWnd->GetClientRect(&rect); RECT rect; pWnd->GetClientRect(&rect); C c hàm c bản c a lớp CWnd hà bả c lớ Hàm CWnd::MoveWindow • void MoveWindow(int x, int y, int nWidth,int nHeight, BOOL bRepaint bRepaint = TRUE ); • void MoveWindow(LPCRECT lpRect,BOOL bRepaint = TRUE); – Dịch chuyển,... đổi kích c một c a sổ – Ví dụ : this->MoveWindow(100,100,400,400); CRect rect; rect.top = 100; rect.left = 100; rect.right = 500; rect.bottom = 500; this->MoveWindow(&rect); 27 C c hàm c bản c a lớp CWnd hà bả c lớ Hàm CWnd::GetDlgCtrlID • int GetDlgCtrlID( ) const; – X c định ID c a một control trên dialog – Ví dụ: int ID; ID = pWnd->GetDlgCtrlID(); C c hàm c bản c a lớp CWnd hà bả c lớ Hàm CWnd::GetDlgItemText... 18 35 C c hàm c bản c a lớp CString hà bả c lớ C c hàm tách chuỗi CString CString::Left(int nCount) CString CString::Right(int nCount) CString CString::Mid(int Start, int nCount) • Ví dụ: CString s = _T("Hello, how are you"); CString strL, strMid, strR; strL = s.Left(5); strMid = s.Mid(7,3); strR = s.Right(3); C c hàm c bản c a lớp CString hà bả c lớ Loại bỏ c c ký tự đầu, cuối chuỗi • Hàm CString::TrimLeft:... WM_RBUTTONDBLCLK ON_WM_RBUTTONDBLCLK OnRButtonDblClk WM_MOUSEMOVE ON_WM_MOUSEMOVE OnMouseMove Xử lý mouse C c thông điệp c a mouse • C c hàm xử lý thông điệp cho mouse c dạng: afx_msg void OnMsgName (UINT nFlags, CPoint point) – point: thu c lớp CPoint, chỉ vị trí c a trỏ chuột G c toạ độ đư c x c định theo g c trái trên c a c a sổ – nFlags: trạng thái c a c c phím chuột và c c phím Ctrl, Alt 16 Xử lý mouse C c. .. 32 C c hàm c bản c a lớp CString hà bả c lớ Truy xuất phần tử • Truy xuất phần tử: operator [], hàm CString::GetAt(), hàm CString::SetAt() • Ví dụ: CString str; str = _T("Xin chao cac ban"); str.SetAt(1, str[3]); //str : “X n chao cac ban” C c hàm c bản c a lớp CString hà bả c lớ Chuỗi rỗng • Hàm CString::Empty: tạo một chuỗi rỗng tạ mộ chuỗ rỗ • Hàm CString::IsEmpty: kiểm tra xem một chuỗi c ... (VK_CONTROL) • if ((nChar == VK_LEFT) && (::GetKeyState (VK_CONTROL) < 0)) { } • ::GetKeyState (VK_NUMLOCK) & 0x01 Một số lớp thường gặp • Lớp CWnd • Lớp CString 23 Lớp CWnd Giới thiệu • Đây là một lớp tổng quát và gặp rất nhiều lần trong quá trình làm vi c trên dialog nói riêng và trên c c ứng dụng MFC nói chung • Lớp CWnd cung c p c c ch c năng c bản cho tất c c c lớp c a sổ (c c control, mainframe,... thư viện MFC Lớp CWnd C c hàm c bản c a lớp CWnd • • • • • • • • • • • • GetDlgItem EnableWindow GetFocus SetFocus GetClientRect MoveWindow GetDlgCtrlID GetDlgItemInt GetDlgItemText SetDlgItemText GetWindowText SetWindowText 24 C c hàm c bản c a lớp CWnd hà bả c lớ Hàm CWnd::GetDlgItem • CWnd* GetDlgItem(int nID ) const; – Trả về con trỏ CWnd* c a một c a sổ con trên 1 dialog – Ví dụ : CWnd *pWnd;... this->GetDlgItem(IDC_EDIT1); C c hàm c bản c a lớp CWnd hà bả c lớ Hàm CWnd::EnableWindow BOOL EnableWindow(BOOL bEnable = TRUE ); – Làm cho c a sổ c thể/không thể bị t c động bởi chuột/bàn phím – Ví dụ: CWnd* pWnd = this->GetDlgItem(edt1); pWnd->EnableWindow(FALSE); pWnd = this->GetDlgItem(stc3); pWnd->EnableWindow(TRUE); 25 C c hàm c bản c a lớp CWnd hà bả c lớ Hàm CWnd::GetFocus • static CWnd* PASCAL GetFocus(...Chương trình MFC đầu tiên trì đầ C c thành phần c a chương trình • Mỗi dialog sẽ c tương ứng một lớp CxxxDlg kế thừa từ CDialog sẽ mộ lớ kế thừ từ class CMFC01Dlg : public CDialog { // Construction public: CMFC01Dlg(CWnd* pParent = NULL); // standard constructor // Dialog Data enum { IDD = IDD_MFC01_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV . trìình MFC đnh MFC đầầu tiênu tiênCCá c thc thàành phnh phầần cn c ủa chương tra chương trììnhnh••CWinApp: lCWinApp: lớớp chp chíính cnh c ủa MFC đa MFC đểểququảản. FALSE;;}}Chương trChương trìình MFC đnh MFC đầầu tiênu tiênCCá c thc thàành phnh phầần cn c ủa chương tra chương trììnhnh••CWnd: lCWnd: lớớp chp chíính cnh c ủa