« Home « Kết quả tìm kiếm

Kỹ thuật lập trình Visual C++ (MFC


Tóm tắt Xem thử

- Lập trình C trên Windows Kỹ thuật lập trình Visual C++ (MFC) Nguyễn Tri Tuấn Khoa CNTT – ĐH.KHTN.Tp.HCM Email: nttuan@ fit.hcmuns.edu.vn Nội dung  Giới thiệu về MFC  Chương trình MFC đầu tiên  Xử lý Mouse và Keyboard  Xử lý menu  Toolbar, Statusbar  Các Control  Xây dựng và xử lý hộp thoại (Dialog box.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 2 1 Giới thiệu về MFC  MFC là gì.
- Một số tính năng của MFC qua từng version  Các thành phần của 1 ứng dụng trong VC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 3 Giới thiệu về MFC – MFC là gì.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 4 2 Giới thiệu về MFC – MFC là gì ?…(tt.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 5 Giới thiệu về MFC - Một số tính năng của MFC  Version 1.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 6 3 Giới thiệu về MFC - Một số tính năng của MFC…(tt.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 7 Giới thiệu về MFC - Một số tính năng của MFC…(tt.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 8 4 Giới thiệu về MFC - Một số tính năng của MFC…(tt.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 9 Giới thiệu về MFC - Các thành phần của 1 ứng dụng Sơ đồ biên dịch các thành phần của 1 ứng dụng trong VC++ C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 10 5 Giới thiệu về MFC - Các màn hình giao diện chính Các thành phần giao diện chính của VC++ C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 11 Giớ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) C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 12 6 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) C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 13 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ình C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 14 7 Ứng dụng đơn giản - Tạo ứng dụng  Chọn menu File Æ New  Chọn tab Projects  Chọn loại project “Win32 Application.
- Step 1: Chọn loại ứng dụng “An empty project.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 15 Ứng dụng đơn giản - Tạo ứng dụng…(tt) Hello.h class CMyApp : public CWinApp { public: virtual BOOL InitInstance.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 16 8 Ứng dụng đơn giản - Tạo ứng dụng…(tt) Hello.cpp #include #include "Hello.h" CMyApp myApp.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 17 Ứng dụng đơn giản - Tạo ứng dụng…(tt) Hello.cpp…(tt) CMainWindow::CMainWindow.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 18 9 Ứng dụng đơn giản - Tạo ứng dụng…(tt) Ứng dụng MFC đơn giản C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 19 Ứng dụng đơn giản – Các thành phần của c.trình  CWinApp: lớp chính của MFC để quản lý ứng dụng.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Ứng dụng đơn giản – Các thành phần của c.trình…(tt.
- 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.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 21 Ứng dụng đơn giản – Các thành phần của c.trình…(tt.
- Làm sao để xử lý 1 message.
- 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ổ ƒ Mỗi message sẽ được xử lý bởi 1 hàm thành phần tương ứng BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) ON_WM_PAINT.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 23 Ứng dụng đơn giản – Các thành phần của c.trình…(tt.
- 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.
- Xử lý thêm message WM_MOUSELEAVE ƒ Bổ sung thêm 1 hàm thành phần vào khai báo của lớp CMainWindow: afx_msg LRESULT OnMouseLeave.
- 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 C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 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 (exe.
- Step 1: Chọn loại ứng dụng “Dialog-based.
- Gõ tiêu đề của ứng dụng vào ô “Enter a title.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 27 Dialog-based App - Tạo ứng dụng bằng MFC AppWizard…(tt) Ứng dụng MFC (Dialog-based) C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 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 ứ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 C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 29 Dialog - based App- Các thành phần của chương trình…(tt.
- Trong ứng dụng Dialog-based, cửa sổ giao diện chính là 1 Dialog, nên ứng dụng dùng lớp CxxxDlg thay vì lớp CMainWindow class CxxxDlg : public CDialog { public: CxxxDlg(CWnd* pParent = NULL).
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Xử lý Mouse và Keyboard  Xử lý mouse ƒ Thông điệp của mouse ƒ Ví dụ: Vẽ hình bằng mouse  Xử lý keyboard ƒ Thông điệp của keyboard ƒ Ví dụ: Xử lý phím nhấn C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 31 Xử lý Mouse  Thông điệp của mouse ƒ WM_LBUTTONDOWN ƒ WM_LBUTTONUP ƒ WM_LBUTTONDBLCLK ƒ WM_RBUTTONDOWN ƒ WM_RBUTTONUP ƒ WM_RBUTTONDBLCLK ƒ WM_MOUSEMOVE ƒ WM_MOUSEWHEEL C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Xử lý Mouse…(tt.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 33 Xử lý Mouse…(tt.
- Ví dụ: Vẽ hình bằng mouse ƒ Mô tả: khi user nhấn giữ nút trái chuột & di chuyển Æ vẽ 1 đường thẳng ƒ Các xử lý cần thiết.
- Định nghĩa 2 biến m_PrevX, m_PrevY trong class CxxxDlg  Định nghĩa hàm xử lý message WM_LBUTTONDOWN trong class CxxxDlg  Định nghĩa hàm xử lý message WM_MOUSEMOVE trong class CxxxDlg C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 35 Xử lý Mouse…(tt.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 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.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 37 Xử lý keyboard…(tt.
- 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 ƒ Các bước thực hiện  Định nghĩa hàm xử lý message WM_KEYDOWN trong class CxxxDlg C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Xử 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ụ C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 39 Xử lý menu - Một vài khái niệm  Menu bar: thanh menu.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Xử lý menu - Tạo lập menu  Thường có 2 cách chính để tạo menu.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 41 Xử lý menu - Tạo lập menu…(tt) xxx.rc IDR_MAINFRAME MENU PRELOAD DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "&New\tCtrl+N", ID_FILE_NEW MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "E&xit", ID_APP_EXIT END POPUP "&Edit" BEGIN MENUITEM "&Undo\tCtrl+Z", ID_EDIT_UNDO MENUITEM SEPARATOR MENUITEM "Cu&t\tCtrl+X", ID_EDIT_CUT MENUITEM "&Copy\tCtrl+C", ID_EDIT_COPY MENUITEM "&Paste\tCtrl+V", ID_EDIT_PASTE END END C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Xử lý menu - Load và hiển thị menu  Xác định menu bar khi tạo cửa sổ: Create(NULL, _T("My Application.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 43 Xử lý menu - Load và hiển thị menu…(tt.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Xử lý menu - Xử lý khi menu item được chọn  Các thông điệp của menu  Xử lý lệnh của menu item  Nhóm lệnh (Command range) C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 45 Xử lý menu - Xử lý khi menu item được chọn…(tt.
- Hàm xử lý tương ứng: CWnd::OnMenuSelect  wParam.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Xử lý menu - Xử lý khi menu item được chọn…(tt.
- WM_COMMAND: phát sinh khi user chọn 1 menu item  Hàm xử lý tương ứng: CWnd::OnCommand  wParam.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 47 Xử lý menu - Xử lý khi menu item được chọn…(tt.
- Xử lý lệnh của menu item ƒ Dựa trên message WM_COMMAND ƒ Định nghĩa message map ON_COMMAND (ID_FILE_OPEN, OnMyFileOpen) ON_COMMAND (ID_FILE_EXIT, OnMyFileExit.
- Viết hàm thành phần xử lý cho menu item tương ứng void CMainFrame::OnMyFileOpen.
- 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: dùng macro ON_COMMAND_RANGE C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 49 Xử lý menu - Xử lý khi menu item được chọn…(tt.
- 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ý.
- Hàm xử lý chung, xác định item hiện hành void CMainFrame::OnDraw.
- Hàm xử lý chung, xác định item hiện hành void CMainFrame::OnDraw (UINT nID.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 51 Xử lý menu - Thay đổi trạng thái menu  Các ví dụ.
- Cách xử lý void CMainFrame::OnDraw(UINT nID.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 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.
- Step 1: Chọn loại ứng dụng “Single Document”, bỏ option “Document/View architecture support.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 53 Xử lý menu – Ví dụ…(tt) C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Xử lý menu – Ví dụ…(tt.
- Xử lý lệnh của menu item ƒ Vẽ thêm vào menu popup File các item: New, Open, Save ƒ Định nghĩa Message Map cho các hàm xử lý item ON_COMMAND(ID_FILE_NEW, OnFileNew) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND(ID_FILE_SAVE, OnFileSave) C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 55 Xử lý menu – Ví dụ…(tt.
- Xử lý lệnh của menu item (tt.
- Viết xử lý lệnh cho từng item void CMainFrame::OnFileNew.
- Xử lý chọn nhóm lệnh ƒ Vẽ thêm menu popup Draw với các item: Line, Circle, Rectangle ƒ Định nghĩa message map ON_COMMAND_RANGE (ID_DRAW_LINE, ID_DRAW_RECTANGLE, OnDraw.
- Viết hàm xử lý void CMainFrame::OnDraw(UINT nID.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 57 Toolbar  Tạo một ứng dụng có Toolbar bằng AppWizard  Tạo Toolbar bằng lớp CToolBar C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Toolbar - Tạo một ứng dụng bằng AppWizard  Tạo một ứng dụng có Toolbar bằng AppWizard ƒ Chọn menu File Æ New ƒ Chọn tab Projects ƒ Chọn loại project “MFC AppWizard (exe.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 59 Toolbar - Tạo một ứng dụng bằng AppWizard…(tt) Chọn option này để AppWizard tự động tạo ra một Docking Toolbar C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Toolbar - Tạo một ứng dụng bằng AppWizard…(tt.
- Các xử lý trong hàm OnCreate của lớp CMainFrame if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 61 Toolbar - Tạo Toolbar bằng lớp CToolBar  Tạo lập và hiển thị  Ẩn/hiện thanh ToolBar  Thêm các ToolTip và FlyBy text C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Toolbar - Tạo Toolbar bằng lớp CToolBar…(tt.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 63 Toolbar - Tạo Toolbar bằng lớp CToolBar…(tt.
- Thêm 1 menu item mới vào menu popup View, với ID là ID_VIEW_DRAWTOOLBAR  Viết hàm xử lý cho menu item này void CMainFrame::OnViewDrawtoolbar.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 65 Toolbar - Tạo Toolbar bằng lớp CToolBar…(tt.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 67 Statusbar  Tạo một ứng dụng có Statusbar bằng AppWizard  Tạo Statusbar bằng lớp CStatusBar C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Statusbar - Tạo một ứng dụng bằng AppWizard  Tạo một ứng dụng có Statusbar bằng AppWizard ƒ Chọn menu File Æ New ƒ Chọn tab Projects ƒ Chọn loại project “MFC AppWizard (exe.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 69 Statusbar - Tạo một ứng dụng bằng AppWizard…(tt) Chọn option này để AppWizard tự động tạo ra một Statusbar C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring Statusbar - Tạo một ứng dụng bằng AppWizard…(tt.
- Các xử lý tương ứng.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 71 Statusbar - Tạo Statusbar bằng lớp CStatusBar  Tạo lập và hiển thị  Ẩn/hiện Statusbar  Thể hiện giúp đỡ cho các menu item  Phân vùng trên Statusbar C4W - VisualC++ (MFC.
- Nguyen Tri Tuan - DH.KHTN Tp.HCM Spring 2004 72 36