Lập trình Windows - Giới thiệu về mfc, visual c++ 6.0

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 API của Windows

• Version 6 có khoảng 200 class

• Giú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 Windows

• Trong một ứng dụng MFC, ta sẽ không gọi trực tiếp các hàm

Windows API mà sẽ tạo các object từ những lớp của MFC, sau

đó gọi các hàm của object này

• Ta vẫn có thể gọi các hàm Windows API trong MFC

ppt61 trang | Chia sẻ: Mr Hưng | Lượt xem: 905 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Lập trình Windows - Giới thiệu về mfc, visual c++ 6.0, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LẬP TRÌNH WINDOWSGiới thiệu về MFC, Visual C++ 6.0Nộ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 BoxNộ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 BoxGiới thiệu về 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 API của Windows• Version 6 có khoảng 200 class• Giú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 Windows• Trong một ứng dụng MFC, ta sẽ không gọi trực tiếp các hàmWindows API mà sẽ tạo các object từ những lớp của MFC, sauđó gọi các hàm của object này• Ta vẫn có thể gọi các hàm Windows API trong MFCGiới thiệu về MFC• Đa số các phương thức của MFC class có cùng tên với những hàm Windows API• MFC 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ấtquán và khoa họ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ơnCác thành phần trong ứng dụng Visual C++Chươ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)Chương trình MFC đầu tiên – ứng dụng đơn giản􀂐 Tạo ứng dụng􀂐 Các thành phần của chương trìnhChương trình MFC đầu tiên – tạo ứng dụng􀂐 Chọn menu File → New􀂐 Chọn tab Projects􀂐 Chọn loại project “Win32 Application”􀂐 Đặt tên project và xác định đường dẫn thư mục trong ô “Location”􀂐 Chọn loại ứng dụng “An empty project”􀂐Nhấn Finish để kết thúcChương trình MFC đầu tiên – tạo ứng dụng􀂃 Add các file Hello.h và Hello.cpp vào project􀂃 Chọn menu Project → Settings Chọn project trong cửa sổ bên trái Chọn tab General Chọn “Use MFC In A Shared DLL”Chương trình MFC đầu tiên – Hello.hclass CMyApp : public CWinApp{public:virtual BOOL InitInstance ();};class CMainWindow : public CFrameWnd{public:CMainWindow ();protected:afx_msg void OnPaint ();DECLARE_MESSAGE_MAP ()};Chương trình MFC đầu tiên – Hello.cpp#include #include "Hello.h"CMyApp myApp;//////////////////////////////////////////////////////////// CMyApp member functionsBOOL CMyApp::InitInstance (){m_pMainWnd = new CMainWindow;m_pMainWnd->ShowWindow (m_nCmdShow);m_pMainWnd->UpdateWindow ();return TRUE;} //////////////////////////////////////////////////////////Chương trình MFC đầu tiên – Hello.cpp(tt)// CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)ON_WM_PAINT ()END_MESSAGE_MAP ()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);}Chương trình MFC đầu tiên – kết quảChương trình MFC đầu tiên – các class của ứng dụngChương trình MFC đầu tiên – các thành phần CWinApp: 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ụng CMyApp: lớp kế thừa từ lớp CWinAppclass CMyApp : public CWinApp {public:virtual BOOL InitInstance ();};Chương trình MFC đầu tiên – các thành phần 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;}Chương trình MFC đầu tiên – các thành phần 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ụngChương trình MFC đầu tiên – các thành phầnChương trình MFC đầu tiên – các thành phần CMainWindow(): hàm khởi tạo cửa sổ giao diện của ứng dụng, override lên hàm chuẩn của lớp CFrameWndCMainWindow::CMainWindow () {Create (NULL, _T ("The Hello Application"));} OnPaint: hàm thành phần của lớp CMainWindow, được gọ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);CRect rect;GetClientRect (&rect);dc.DrawText (_T ("Hello, MFC"), -1, &rect, DT_SINGLELINE ¦ DT_CENTER ¦ DT_VCENTER);}Chương trình MFC đầu tiên – các bước thực thi ứng dụngChương trình MFC đầu tiên – đăng ký lớp cửa sổChương trình MFC đầu tiên – tạo lập cửa sổChương trình MFC đầu tiên – Hàm lập cửa sổChương trình MFC đầu tiên – Hàm lập cửa sổ - tham sốChương trình MFC đầu tiên – Hàm lập cửa sổ - các kiểu dáng cửa sổChương trình MFC đầu tiên – Hiển thị cửa sổChương trình MFC đầu tiên – Vòng lặp và xử lý thông điệpChương trình MFC đầu tiên – Message Map – Ánh xạ thông điệp MFC dùng Message Map để liên kết các message với những hàm thành phần của lớp cửa sổÁ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ớp khác trong khai báo lớpclass CMainWindow : public CFrameWnd{public:CMainWindow ();protected:afx_msg void OnPaint ();DECLARE_MESSAGE_MAP ()};Chương trình MFC đầu tiên – Message Map – Ánh xạ thông điệp Mỗi message sẽ được xử lý bởi 1 hàm thành phầ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ự đầuVí 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 OnLButtonDownChương trình MFC đầu tiên – Message Map – Ánh xạ thông điệpKhai báo Message Mapclass 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 ()};Cài đặt xử lý MessageBEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()END_MESSAGE_MAP ()void CMainWindow::OnPaint() {}void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point){}Chương trình MFC đầu tiên – Message Map – Ánh xạ thông điệpChương trình MFC đầu tiên – Xử lý thêm message WM_LBUTTONDOWN Bổ sung thêm 1 hàm thành phần vào khai báo của lớp CMainWindow:afx_msg void OnLButtonDown(UINT nFlags, CPoint point); Bổ sung thêm 1 macro vào khai báo Message Map:ON_WM_LBUTTONDOWN () Định nghĩa hàm thành phần OnLButtonDown:void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point){MessageBox("Left button clicked !", "Mouse", MB_OK);}Tạo ứng dụng MFC bằng APPWizardChọn menu File → New Chọn Tab Projects Chọn loại project “MFC AppWizard (exe)” Đặt tên project trong ô “Project name” Xác định đường dẫn thư mục trong “Location” Step 1: Chọn loại ứng dụng “Single Document”Nhấn “Next” đến “Step 4 of 6”Tạo ứng dụng MFC bằng APPWizardChọn loại project “MFC AppWizard (EXE)”Tạo ứng dụng MFC bằng APPWizardChọn option “Single document”Tạo ứng dụng MFC bằng APPWizardChọn option “None”Tạo ứng dụng MFC bằng APPWizardChọn option “Next”Tạo ứng dụng MFC bằng APPWizardChọn option “Next”Tạo ứng dụng MFC bằng APPWizardChọn “Finish”Xử lý thông điệp chuộtMessage Map và ClassWizardHàm xử lý thông điệp chuột tương ứngvoid CMouseView::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCView::OnLButtonDown(nFlags, point);}void CMouseView::OnLButtonUp(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCView::OnLButtonUp(nFlags, point);}void CMouseView::OnMouseMove(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCView::OnMouseMove(nFlags, point);}Hàm xử lý thông điệp chuột tương ứngvoid CMouseView::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultm_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 defaultCClientDC dc(this);dc.MoveTo(m_nStartX,m_nStartY);dc.LineTo(point.x,point.y);CView::OnLButtonUp(nFlags, point);}Kết quảHàm xử lý thông điệp chuột tương ứngvoid CMouseView::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultm_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 defaultCClientDC dc(this);dc.MoveTo(m_nStartX,m_nStartY);dc.LineTo(point.x,point.y);CView::OnLButtonUp(nFlags, point);}Kết quảXử lý Keyboard - Thông điệp của keyboard WM_KEYDOWN / WM_KEYUP: phát sinh khi 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ứa các thông tin khác (số lần lặp lại phím, scan code,extended key,) WM_CHAR: là kết quả phát sinh do message WM_KEYDOWN, báo hiệu 1 ký tự in được (printed character) đã được tạo ra Hàm xử lý tương ứng: CWnd::OnChar wParam: mã ký tự lParam: chứa các thông tin khác (số lần lặp lại do nhấn giữphím, có phím Alt nhấn kèm,)Xử lý Keyboard - Ví dụVí dụ: Xử lý phím nhấn Mô tả: khi user nhấn một phím → hiển thị 1 MessageBox thông báo Các xử lý cần thiết WM_KEYDOWN ↔ OnKeyDownĐịnh nghĩa hàm xử lý message WM_KEYDOWNXử lý Menu 􀂐 Một vài khái niệm􀂐 Tạo lập menu􀂐 Load và hiển thị menu􀂐 Xử lý khi menu item được chọn􀂐 Thay đổi trạng thái menu􀂐 Ví dụXử lý Menu - Một vài khái niệm Menu bar: thanh menu. Bao gồm nhiều drop-down menu và menu item Drop-down menu: một phần của menu bar, chứa các menu item hoặc các drop-down menu khác.VD. File, Edit, Menu item: tương ứng với 1 lệnh của chương trình. Mỗi menu item được xác định bằng 1 số nguyên phân biệt, gọi là item ID hay command ID.VD. Open, Save, Popup menu: giống như drop-down menu, nhưng có thể xuất hiện ở vị trí bất kỳ trên màn hình (thường khi nhấn nút phải mouse) System menu: chứa các lệnh hệ thống điều khiển cửa sổ. VD. Minimize, Maximize, Close, Xử lý Menu - Tạo lập menuThườ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, Xử lý Menu - Tạo lập menuFile xxx.rcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN POPUP "&File" BEGINMENUITEM "&New\tCtrl+N", ID_FILE_NEWMENUITEM "&Open...\tCtrl+O", ID_FILE_OPENMENUITEM SEPARATORMENUITEM "E&xit", ID_APP_EXIT END POPUP "&Edit" BEGINMENUITEM "&Undo\tCtrl+Z", ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM "Cu&t\tCtrl+X", ID_EDIT_CUTMENUITEM "&Copy\tCtrl+C", ID_EDIT_COPYMENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE ENDENDXử lý Menu - Load và hiển thị menuXác định menu bar khi tạo cửa sổ:Create(NULL, _T("My Application"), WS_OVERLAPPEDWINDOW, rectDefault, NULL, MAKEINTRESOURCE(IDR_MAINFRAME));Thay đổi menu bar:CMenu menu;menu.LoadMenu(IDR_MAINFRAME);SetMenu(&menu);menu.Detach();Message Box Hộp thông báo được sử dụng để thông báo, trao đổi giữa ứng dụng với người dùng Để tạo lập hộp thông báo, ta sử dụng hàm MessageBoxCWnd::int MessageBox (LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK)Các kiểu hộp thông báo và giá trị trả về tương ứngTypeButtonsReturn CodesMB_ABORTRETRYIGNOREAbort, Retry, IgnoreIDABORT, IDRETRY, IDIGNOREMB_OKOKIDOKMB_OKCANCELOK, CancelIDOK, IDCANCELMB_RETRYCANCELRetry, CancelIDRETRY, IDCANCELMB_YESNOYes, NoIDYES, IDNOMB_YESNOCANCELYes, No, CancelIDYES, IDNO, IDCANCELMessage Box - Ví dụ Để tạo lập hộp thông báo trên ta sử dụng hàm MessageBox như sau:int nRes = MessageBox (“Are you sure you want to delete these 2 items?”, “Confirm Multiple File Delete”, MB_YESNO) Chọn “Yes” → nRes =IDYES Chọn “No” → nRes = IDNOMessage Box - Ví dụ Để tạo lập hộp thông báo trên ta sử dụng hàm MessageBox như sau:int nRes = MessageBox (“Do you want to save the changes to Document1”, “Microsoft Office Word ”, MB_YESNOCANCEL) Chọn “Yes” → nRes =IDYES Chọn “No” → nRes = IDNOChọn “Cancel” → nRes = IDCANCELMessage Box - Các kiểu biểu tượng trong hộp thông báo Message Box - Ví dụ Để tạo lập hộp thông báo trên ta sử dụng hàm MessageBox như sau:int nRes = MessageBox (“Do you want to continue”, “My Application”, MB_YESNO | MB_ICONQUESTION) Chọn “Yes” → nRes =IDYES Chọn “No” → nRes = IDNOMessage Box - Ví dụ Để tạo lập hộp thông báo trên ta sử dụng hàm MessageBox như sau:int nRes = MessageBox (“Do you want to save the changes to Document1” , “Microsoft Office Word”, MB_YESNOCANCEL | MB_ICONEXCLAMATION) Chọn “Yes” → nRes =IDYES Chọn “No” → nRes = IDNOChọn “Cancel” → nRes = IDCANCEL

Các file đính kèm theo tài liệu này:

  • pptlap_trinh_window_chuong2_0345.ppt
Tài liệu liên quan