1. Trang chủ
  2. » Công Nghệ Thông Tin

LẬP TRÌNH WINDOWS - KỸ THUẬT LẬP TRÌNH VISUAL C++(MFC – Microsoft Foundation Classes) pdf

71 2,2K 3

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 71
Dung lượng 1,75 MB

Nội dung

Giới thiệu về MFC 1/2™ MFC – Microsoft Foundation Class ™ MFC 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 ™ MFC được

Trang 1

Đại Học Sư Phạm Tp Hồ Chí Minh

KỸ THUẬT LẬP TRÌNH

VISUAL C++

(MFC – Microsoft Foundation Classes)

Trần Ngọc Bảo Email: tnbao.dhsp@gmail.com

Trang 4

Giới thiệu về MFC (1/2)

™ MFC – Microsoft Foundation Class

™ MFC 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

™ MFC được xây dựng trên cơ sở 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

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

™ Đa số các hàm của lớp MFC có cùng tên với những hàm

Windows API

Trang 5

™ MFC tạo ra một Application Framework giúp cho lập trình viên thiết kế kiến trúc của ứng dụng nhất quán và khoa học hơn

™ Thông qua các class trong MFC, 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 MFC ta vẫn có thể gọi các hàm Windows API

™ MFC có nhiều version 1, 2, 3, 6 Version 6.0 có khoảng

200 class

Giới thiệu về MFC (2/2)

Trang 6

Một số tính năng của MFC (1/4)

™ Version 1: (Visual C++ 1.0)

™ Version 2: (Visual C++ 1.0)

ƒ 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

ƒ File open, save

ƒ Print preview, printing

ƒ Scrolling window, Spliter window

ƒ Tool bar, status bar

ƒ Access to Visual Basic controls

ƒ Context-sensitive help

ƒ An improved interface to OLE version 1.0

Trang 7

ƒ Hỗ trợ Tab dialog (property sheet)

ƒ Docking tool bar

Trang 8

™ Version 4.0: (Visual C++ 4.0)

™ Version 4.2: (Visual C++ 4.2)

ƒ Hỗ trợ kết nối DAO (Data Acess Object)

ƒ Windows 95 docking control bar

ƒ Bổ sung thêm Treeview và RichEdit

ƒ Các lớp đồng bộ hóa tiểu trình

ƒ OLE control container

ƒ 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

ƒ Cải tiến một số tính năng của ODBC

Một số tính năng của MFC (3/4)

Trang 9

™ Version 4.21: (Visual C++ 5.0)

™ Version 6.0: (Visual C++ 6.0)

ƒ Sửa một số lỗi trong version 4.2

ƒ Redesigned IDE, Developer Studio 97

ƒ Hỗ trợ lập trình COM (Component Object Model)

ƒ Hỗ trợ Các lớp cho những control chuẩn trong ID 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à ADO

Một số tính năng của MFC (4/4)

Trang 11

Các thành phần trong ứng dụng Visual C++

nguyên

Trang 12

Cửa sổ chính của MS Visual C++ 6.0

Trang 14

MS Visual C++ 6.0 – Class View

Trang 15

MS Visual C++ 6.0 – Resource View

Trang 16

MS Visual C++ 6.0 – File View

Trang 17

Cửa sổ Debugger trong MS Visual C++ 6.0

Trang 19

Các loại ứng dụng (1/2)

™ Win32 Console: ứng dụng 32 bits, với giao diện dạng DOS command line

™ Win32 (SDK): ứng dụng 32 bits, chỉ sử dụng thư viện SDK

™ Win32 DLL: ứng dụng 32 bits, dạng thư viện liên kết động (Dynamic – Linked Library) sử dụng SDK

™ Win32 LIB: ứng dụng 32 bits, dạng thư viện liên kết tĩnh (Static –

Linked Library) sử dụng SDK

™ MFC EXE: ứng dụng 32 bits, sử dụng thư viện MFC

™ MFC DLL: ứng dụng 32 bits, dạng thư viện liên kết động (Dynamic – Linked Library) sử dụng MFC

Trang 20

Các loại ứng dụng (2/2)

Trang 22

Ứng dụng MFC đầu tiên – Hello.h

class CMyApp : public CWinApp

Trang 23

Ứng dụng MFC đầu tiên – Hello.cpp

return TRUE;

} /////////////////////////////////////////////////////////////////////////

Trang 24

Ứng dụng MFC đầu tiên – Hello.cpp (tt)

// CMainWindow message map and member functions

BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)

Trang 25

Kết quả chương trình Hello

Trang 26

Các class của ứng dụng Hello

CCmdTarget CObject

Trang 27

Các bước thực thi ứng dụng

WinMain

Đăng ký lớp cửa sổ Tạo lập cửa sổ Hiển thị cửa sổ Message Loop

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{

// TODO: Place code here.

MSG msg;

MyRegisterClass(hInstance);

// Perform application initialization:

if (!InitInstance (hInstance, nCmdShow))

{

return FALSE;

} // Main message loop:

while (GetMessage(&msg, NULL, 0, 0)) {

TranslateMessage(&msg);

DispatchMessage(&msg);

} return msg.wParam;

}

Trang 28

Đăng ký lớp cửa sổ

Đăng ký lớp cửa sổ Tạo lập cửa sổ Hiển thị cửa sổ Message Loop

ATOM MyRegisterClass(HINSTANCE hInstance)

wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_BAI02);

wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

m_pMainWnd = new CMainWindow;

m_pMainWnd->ShowWindow (m_nCmdShow);

m_pMainWnd->UpdateWindow (); return TRUE;

}

Trang 29

Tạo lập cửa sổ

WinMain

Đăng ký lớp cửa sổ Tạo lập cửa sổ Hiển thị cửa sổ Message Loop

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

Create (NULL, _T ("The Hello Application"));

}

Trang 30

Hàm tạo lập cửa sổ

CMainWindow

CMainWindow::CMainWindow () {

Create (NULL, _T ("The Hello Application"));

}

BOOL Create (LPCTSTR lpszClassName,

LPCTSTR lpszWindowName, DWORD dwStyle = WS_OVERLAPPEDWINDOW, const RECT& rect = rectDefault,

CWnd* pParentWnd = NULL, LPCTSTR lpszMenuName = NULL, DWORD dwExStyle = 0,

CCreateContext* pContext = NULL)

Trang 31

Các tham số trong hàm tạo lập cửa sổ

lpszClassName Tên lớp cửa sổ

lpszWindowName Tiêu đồ cửa sổ

dwStyle Kiểu dáng cửa sổ

rect Kích thước và vị trí ban đầu của cửa sổ

pParentWnd Cửa sổ cha, NULL cửa sổ không có cửa sổ cha

lpszMenuName Thực đơn liên quan đến cửa sổ, NULL nghĩa làcửa sổ không có Menu dwExStyle Kiểu mở rộng của cửa sổ

pContext Sử dụng trong ứng dụng Documents/Views

Trang 32

Các kiểu dáng chuẩn của cửa sổ

WS_BORDER Tạo cửa sổ với khung mỏng

WS_CAPTION Tạo cửa sổ với thanh tiêu đề

WS_CHILD Tạo cửa sổ con, sử dụng để tạo điều khiển như phím và các cửa sổ con MDIWS_OVERAPPEP Lập cửa sổ maximize và không có cửa sổ cha

WS_OVERAPPEPWI

NDOW Lập cửa sổ với các kiểu: WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_MAXIMIZEBOX, WS_MINIMIZEBOX,

WS_DISABLED Cửa sổ sẽ bị vô hiệu lực

WS_DLGFRAME Cửa sổ có viền như dialog

WS_MAXIMIZE Cử sổ có Maximize

WS_MAXIMIZBOX Cửa sổ có nút maximize trên thanh tiêu đề

WS_HSCROLL Cửa sổ có thanh trượt ngang

WS_VSCROLL Cửa sổ có thanh trượt dọc

Trang 33

Hiển thị cửa sổ

WinMain

Đăng ký lớp cửa sổ Tạo lập cửa sổ Hiển thị cửa sổ Message Loop

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

m_pMainWnd = new CMainWindow;

m_pMainWnd->ShowWindow (m_nCmdShow);

m_pMainWnd->UpdateWindow ();

return TRUE;

}

Trang 34

Vòng lặp và xử lý thông điệp

WinMain

Đăng ký lớp cửa sổ Tạo lập cửa sổ Hiển thị cửa sổ Message Loop

CMainWindow

Tiếp nhận và xử lý thông điệp như thế nào ?

while (GetMessage (&msg, NULL, 0, 0))

}

Message Map

Trang 35

Message Map – Ánh xạ thông điệp

™ Á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 đó

™ Bất kỳ lớp nào suy diễn từ CCmdTarget đều có thể chứa ánh

™ Á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ớp

Trang 36

ƒ WM_PAINT sẽ được chuyển thành On Paint

ƒ WM_MOUSEMOVE sẽ được chuyển thành On MouseMove

ƒ WM_LBUTTONDOWN sẽ được chuyển thành On LB utton D own

phần tương ứng

Trang 37

BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)

afx_msg void OnPaint () ;

DECLARE_MESSAGE_MAP () };

Message Map (tt)

Trang 38

Message Afx function

WM_CHAR afx_msg void OnChar(UINT,UINT,UINT)

WM_CREATE afx_msg int OnCreate(LPCREATESTRUCT)

WM_DESTROY afx_msg void OnDestroy()

WM_LBUTTONDOWN afx_msg void OnLButtonDown(UINT, CPoint)

WM_LBUTTONUP afx_msg void OnLButtonUp(UINT, CPoint)

WM_MOUSEMOVE afx_msg void OnMouseMove(UINT, CPoint)

WM_RBUTTONDOWN afx_msg void OnRButtonDown(UINT, CPoint)

WM_RBUTTONUP afx_msg void OnRButtonUp(UINT, CPoint)

WM_SIZE afx_msg void OnSize()

WM_PAINT afx_msg void OnPaint()

Thông điệp WM_XXX và hàm MFC tương ứng

Trang 39

Xử lý thông điệp cửa sổ - Message Map

Trang 40

Tạo ứng dụng MFC bằng AppWizard

™ Chọ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”, bỏ option “Document/View architecture support”

™ Nhấn “Next” đến “Step 4 of 6”

Trang 41

Tạo ứng dụng MFC bằng AppWizard

Chọn loại project “MFC AppWizard (EXE)”

Trang 42

Tạo ứng dụng MFC bằng AppWizard

Chọn option “Single document”

Trang 43

Tạo ứng dụng MFC bằng AppWizard

Chọn option “None”

Trang 44

Tạo ứng dụng MFC bằng AppWizard

Trang 48

Ứng dụng MFC đầu tiên – File view

Trang 49

Ứng dụng MFC đầu tiên – Resource view

Trang 50

Ứng dụng MFC đầu tiên – Class view

Trang 51

Ứng dụng MFC đầu tiên – kết quả chương trình

Trang 53

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

WM_LBUTTONDOWN afx_msg void OnLButtonDown(UINT, CPoint)WM_LBUTTONUP afx_msg void OnLButtonUp(UINT, CPoint)WM_LBUTTONBLCLK afx_msg void OnLButtonDblClk(UINT, CPoint)WM_RBUTTONDOWN afx_msg void OnRButtonDown(UINT, CPoint)WM_RBUTTONUP afx_msg void OnRButtonUp(UINT, CPoint)WM_RBUTTONBLCLK afx_msg void OnRButtonDblClk(UINT, CPoint)WM_MOUSEMOVE afx_msg void OnMouseMove(UINT, CPoint)

Trang 54

Message Map và ClassWizard

Trang 55

Hàm xử lý thông điệp chuột tương ứng

Trang 58

void CMouseView::OnLButtonDown(UINT nFlags, CPoint point)

Trang 59

Hàm xử lý thông điệp chuột tương ứng

void CMouseView::OnLButtonDown(UINT nFlags, CPoint point)

Trang 60

Kết quả xử lý thông điệp chuột

Trang 61

Hàm xử lý thông điệp chuột tương ứng

void CMouseView::OnLButtonDown(UINT nFlags, CPoint point)

Trang 62

Kết quả xử lý thông điệp chuột

Trang 64

Message Box - Hộp thông báo

™ 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

MessageBox

Cwnd::int MessageBox (LPCTSTR lpszText,

LPCTSTR lpszCaption = NULL, UINT nType = MB_OK)

Trang 65

Các kiểu hộp thông báo và giá trị trả về tương ứng

Type Buttons Possible Return Codes

MB_ABORTRETRYIGNORE Abort, Retry,

Ignore IDABORT, IDRETRY, IDIGNORE

MB_OKCANCEL OK, Cancel IDOK, IDCANCEL

MB_RETRYCANCEL Retry, Cancel IDRETRY, IDCANCEL

MB_YESNO Yes, No IDYES, IDNO

MB_YESNOCANCEL Yes, No,

Cancel IDYES, IDNO, IDCANCEL

Trang 66

Message Box - Hộp thông báo

™ Để tạo lập hộp thông báo trên ta sử dụng hàm

MessageBox như sau:

int nRes = MessageBox (“The file ‘Database Tip.doc’ is a read-only file Are you sure you want to move it to the Recycle Bin ?”,

™ Chọn “Yes” Æ nRes =IDYES

™ Chọn “No” Æ nRes = IDNO

Trang 67

Message Box - Hộp thông báo

™ Để 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 = IDNO

™ Chọn “Cancel” Æ nRes = IDCANCEL

Trang 68

Các kiểu biểu tượng trong hộp thông báo

MB_ICONEXCLAMATION MB_ICONSTOP

Trang 69

Message Box - Hộp thông báo

™ Để tạo lập hộp thông báo với Icon như 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 )

Trang 70

Message Box - Hộp thông báo

™ Để tạo lập hộp thông báo với Icon như 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 )

Ngày đăng: 15/03/2014, 21:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w