61
LẬP TRÌNH WINDOWS Giới thiệu về MFC, Visual C++ 6.0 Giới thiệu về MFC, Visual C++ 6.0

LẬP TRÌNH WINDOWS

Embed Size (px)

DESCRIPTION

LẬP TRÌNH WINDOWS. Giới thiệu về MFC, Visual C++ 6.0. Nộ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 Box. Nộ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 Box. - PowerPoint PPT Presentation

Citation preview

Page 1: LẬP TRÌNH WINDOWS

LẬP TRIgraveNH WINDOWSLẬP TRIgraveNH WINDOWS

Giới thiệu về MFC Visual C++ 60Giới thiệu về MFC Visual C++ 60Giới thiệu về MFC Visual C++ 60Giới thiệu về MFC Visual C++ 60

Nội dungNội dungNội dungNội dung

bull Giới thiệu về MFC

bull Chương trigravenh MFC đầu tiecircn

bull Xử lyacute chuột vagrave bagraven phiacutem

bull Message Box

Nội dungNội dungNội dungNội dung

bull Giới thiệu về MFC

bull Chương trigravenh MFC đầu tiecircn

bull Xử lyacute chuột vagrave bagraven phiacutem

bull Message Box

Giới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFC

bull Microsoft Foundation Classbull lagrave một thư viện caacutec lớp (class OOP) trong ngocircn ngữ Visual C++ được sử dụng để xacircy dựng caacutec ứng dụng trecircn Windowsbull Được xacircy dựng trecircn cơ sở caacutec hagravem thư viện API của Windows

bull Version 6 coacute khoảng 200 classbull Giuacutep cho người lập trigravenh coacute thể xacircy dựng ứng dụng nhanh vagrave iacutet tốn cocircng sức hơn so với việc sử dụng đơn thuần caacutec hagravem thư viện API của Windowsbull Trong một ứng dụng MFC ta sẽ khocircng gọi trực tiếp caacutec hagravemWindows API magrave sẽ tạo caacutec object từ những lớp của MFC sauđoacute gọi caacutec hagravem của object nagraveybull Ta vẫn coacute thể gọi caacutec hagravem Windows API trong MFC

Giới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFC

bull Đa số caacutec phương thức của MFC class coacute cugraveng tecircn

với những hagravem Windows API

bull MFC tạo ra một Application Framework giuacutep

1048707 Thiết lập kiến truacutec của ứng dụng một caacutech nhất

quaacuten vagrave khoa học

1048707 Che dấu đi nhiều phần chi tiết magrave Windows API

đogravei hỏi giuacutep developer ldquothảnh thơirdquo hơn

Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++

Chương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircn

1048707 Ứng dụng đơn giản dugraveng Application Framework

1048707 Ứng dụng phức tạp hơn (Dialog-based App)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giảnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giản

1048707 Tạo ứng dụng

1048707 Caacutec thagravenh phần của chương trigravenh

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Chọn menu File rarr New

1048707 Chọn tab Projects

1048707 Chọn loại project ldquoWin32 Applicationrdquo

1048707 Đặt tecircn project vagrave xaacutec định đường dẫn thư mục trong

ocirc

ldquoLocationrdquo

1048707 Chọn loại ứng dụng ldquoAn empty projectrdquo

1048720Nhấn Finish để kết thuacutec

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Add caacutec file Helloh vagrave Hellocpp vagraveo project

1048707 Chọn menu Project rarr Settings

Chọn project trong cửa sổ becircn traacutei

Chọn tab General

Chọn ldquoUse MFC In A Shared DLLrdquo

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHellohChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHelloh

class CMyApp public CWinApp

publicvirtual BOOL InitInstance ()

class CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocppChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocpp

include ltafxwinhgtinclude HellohCMyApp myApp CMyApp member functionsBOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindowm_pMainWnd-gtShowWindow (m_nCmdShow)m_pMainWnd-gtUpdateWindow ()return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 2: LẬP TRÌNH WINDOWS

Nội dungNội dungNội dungNội dung

bull Giới thiệu về MFC

bull Chương trigravenh MFC đầu tiecircn

bull Xử lyacute chuột vagrave bagraven phiacutem

bull Message Box

Nội dungNội dungNội dungNội dung

bull Giới thiệu về MFC

bull Chương trigravenh MFC đầu tiecircn

bull Xử lyacute chuột vagrave bagraven phiacutem

bull Message Box

Giới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFC

bull Microsoft Foundation Classbull lagrave một thư viện caacutec lớp (class OOP) trong ngocircn ngữ Visual C++ được sử dụng để xacircy dựng caacutec ứng dụng trecircn Windowsbull Được xacircy dựng trecircn cơ sở caacutec hagravem thư viện API của Windows

bull Version 6 coacute khoảng 200 classbull Giuacutep cho người lập trigravenh coacute thể xacircy dựng ứng dụng nhanh vagrave iacutet tốn cocircng sức hơn so với việc sử dụng đơn thuần caacutec hagravem thư viện API của Windowsbull Trong một ứng dụng MFC ta sẽ khocircng gọi trực tiếp caacutec hagravemWindows API magrave sẽ tạo caacutec object từ những lớp của MFC sauđoacute gọi caacutec hagravem của object nagraveybull Ta vẫn coacute thể gọi caacutec hagravem Windows API trong MFC

Giới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFC

bull Đa số caacutec phương thức của MFC class coacute cugraveng tecircn

với những hagravem Windows API

bull MFC tạo ra một Application Framework giuacutep

1048707 Thiết lập kiến truacutec của ứng dụng một caacutech nhất

quaacuten vagrave khoa học

1048707 Che dấu đi nhiều phần chi tiết magrave Windows API

đogravei hỏi giuacutep developer ldquothảnh thơirdquo hơn

Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++

Chương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircn

1048707 Ứng dụng đơn giản dugraveng Application Framework

1048707 Ứng dụng phức tạp hơn (Dialog-based App)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giảnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giản

1048707 Tạo ứng dụng

1048707 Caacutec thagravenh phần của chương trigravenh

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Chọn menu File rarr New

1048707 Chọn tab Projects

1048707 Chọn loại project ldquoWin32 Applicationrdquo

1048707 Đặt tecircn project vagrave xaacutec định đường dẫn thư mục trong

ocirc

ldquoLocationrdquo

1048707 Chọn loại ứng dụng ldquoAn empty projectrdquo

1048720Nhấn Finish để kết thuacutec

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Add caacutec file Helloh vagrave Hellocpp vagraveo project

1048707 Chọn menu Project rarr Settings

Chọn project trong cửa sổ becircn traacutei

Chọn tab General

Chọn ldquoUse MFC In A Shared DLLrdquo

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHellohChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHelloh

class CMyApp public CWinApp

publicvirtual BOOL InitInstance ()

class CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocppChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocpp

include ltafxwinhgtinclude HellohCMyApp myApp CMyApp member functionsBOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindowm_pMainWnd-gtShowWindow (m_nCmdShow)m_pMainWnd-gtUpdateWindow ()return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 3: LẬP TRÌNH WINDOWS

Nội dungNội dungNội dungNội dung

bull Giới thiệu về MFC

bull Chương trigravenh MFC đầu tiecircn

bull Xử lyacute chuột vagrave bagraven phiacutem

bull Message Box

Giới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFC

bull Microsoft Foundation Classbull lagrave một thư viện caacutec lớp (class OOP) trong ngocircn ngữ Visual C++ được sử dụng để xacircy dựng caacutec ứng dụng trecircn Windowsbull Được xacircy dựng trecircn cơ sở caacutec hagravem thư viện API của Windows

bull Version 6 coacute khoảng 200 classbull Giuacutep cho người lập trigravenh coacute thể xacircy dựng ứng dụng nhanh vagrave iacutet tốn cocircng sức hơn so với việc sử dụng đơn thuần caacutec hagravem thư viện API của Windowsbull Trong một ứng dụng MFC ta sẽ khocircng gọi trực tiếp caacutec hagravemWindows API magrave sẽ tạo caacutec object từ những lớp của MFC sauđoacute gọi caacutec hagravem của object nagraveybull Ta vẫn coacute thể gọi caacutec hagravem Windows API trong MFC

Giới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFC

bull Đa số caacutec phương thức của MFC class coacute cugraveng tecircn

với những hagravem Windows API

bull MFC tạo ra một Application Framework giuacutep

1048707 Thiết lập kiến truacutec của ứng dụng một caacutech nhất

quaacuten vagrave khoa học

1048707 Che dấu đi nhiều phần chi tiết magrave Windows API

đogravei hỏi giuacutep developer ldquothảnh thơirdquo hơn

Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++

Chương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircn

1048707 Ứng dụng đơn giản dugraveng Application Framework

1048707 Ứng dụng phức tạp hơn (Dialog-based App)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giảnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giản

1048707 Tạo ứng dụng

1048707 Caacutec thagravenh phần của chương trigravenh

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Chọn menu File rarr New

1048707 Chọn tab Projects

1048707 Chọn loại project ldquoWin32 Applicationrdquo

1048707 Đặt tecircn project vagrave xaacutec định đường dẫn thư mục trong

ocirc

ldquoLocationrdquo

1048707 Chọn loại ứng dụng ldquoAn empty projectrdquo

1048720Nhấn Finish để kết thuacutec

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Add caacutec file Helloh vagrave Hellocpp vagraveo project

1048707 Chọn menu Project rarr Settings

Chọn project trong cửa sổ becircn traacutei

Chọn tab General

Chọn ldquoUse MFC In A Shared DLLrdquo

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHellohChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHelloh

class CMyApp public CWinApp

publicvirtual BOOL InitInstance ()

class CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocppChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocpp

include ltafxwinhgtinclude HellohCMyApp myApp CMyApp member functionsBOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindowm_pMainWnd-gtShowWindow (m_nCmdShow)m_pMainWnd-gtUpdateWindow ()return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 4: LẬP TRÌNH WINDOWS

Giới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFC

bull Microsoft Foundation Classbull lagrave một thư viện caacutec lớp (class OOP) trong ngocircn ngữ Visual C++ được sử dụng để xacircy dựng caacutec ứng dụng trecircn Windowsbull Được xacircy dựng trecircn cơ sở caacutec hagravem thư viện API của Windows

bull Version 6 coacute khoảng 200 classbull Giuacutep cho người lập trigravenh coacute thể xacircy dựng ứng dụng nhanh vagrave iacutet tốn cocircng sức hơn so với việc sử dụng đơn thuần caacutec hagravem thư viện API của Windowsbull Trong một ứng dụng MFC ta sẽ khocircng gọi trực tiếp caacutec hagravemWindows API magrave sẽ tạo caacutec object từ những lớp của MFC sauđoacute gọi caacutec hagravem của object nagraveybull Ta vẫn coacute thể gọi caacutec hagravem Windows API trong MFC

Giới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFC

bull Đa số caacutec phương thức của MFC class coacute cugraveng tecircn

với những hagravem Windows API

bull MFC tạo ra một Application Framework giuacutep

1048707 Thiết lập kiến truacutec của ứng dụng một caacutech nhất

quaacuten vagrave khoa học

1048707 Che dấu đi nhiều phần chi tiết magrave Windows API

đogravei hỏi giuacutep developer ldquothảnh thơirdquo hơn

Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++

Chương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircn

1048707 Ứng dụng đơn giản dugraveng Application Framework

1048707 Ứng dụng phức tạp hơn (Dialog-based App)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giảnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giản

1048707 Tạo ứng dụng

1048707 Caacutec thagravenh phần của chương trigravenh

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Chọn menu File rarr New

1048707 Chọn tab Projects

1048707 Chọn loại project ldquoWin32 Applicationrdquo

1048707 Đặt tecircn project vagrave xaacutec định đường dẫn thư mục trong

ocirc

ldquoLocationrdquo

1048707 Chọn loại ứng dụng ldquoAn empty projectrdquo

1048720Nhấn Finish để kết thuacutec

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Add caacutec file Helloh vagrave Hellocpp vagraveo project

1048707 Chọn menu Project rarr Settings

Chọn project trong cửa sổ becircn traacutei

Chọn tab General

Chọn ldquoUse MFC In A Shared DLLrdquo

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHellohChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHelloh

class CMyApp public CWinApp

publicvirtual BOOL InitInstance ()

class CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocppChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocpp

include ltafxwinhgtinclude HellohCMyApp myApp CMyApp member functionsBOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindowm_pMainWnd-gtShowWindow (m_nCmdShow)m_pMainWnd-gtUpdateWindow ()return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 5: LẬP TRÌNH WINDOWS

Giới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFCGiới thiệu về MFC

bull Đa số caacutec phương thức của MFC class coacute cugraveng tecircn

với những hagravem Windows API

bull MFC tạo ra một Application Framework giuacutep

1048707 Thiết lập kiến truacutec của ứng dụng một caacutech nhất

quaacuten vagrave khoa học

1048707 Che dấu đi nhiều phần chi tiết magrave Windows API

đogravei hỏi giuacutep developer ldquothảnh thơirdquo hơn

Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++

Chương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircn

1048707 Ứng dụng đơn giản dugraveng Application Framework

1048707 Ứng dụng phức tạp hơn (Dialog-based App)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giảnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giản

1048707 Tạo ứng dụng

1048707 Caacutec thagravenh phần của chương trigravenh

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Chọn menu File rarr New

1048707 Chọn tab Projects

1048707 Chọn loại project ldquoWin32 Applicationrdquo

1048707 Đặt tecircn project vagrave xaacutec định đường dẫn thư mục trong

ocirc

ldquoLocationrdquo

1048707 Chọn loại ứng dụng ldquoAn empty projectrdquo

1048720Nhấn Finish để kết thuacutec

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Add caacutec file Helloh vagrave Hellocpp vagraveo project

1048707 Chọn menu Project rarr Settings

Chọn project trong cửa sổ becircn traacutei

Chọn tab General

Chọn ldquoUse MFC In A Shared DLLrdquo

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHellohChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHelloh

class CMyApp public CWinApp

publicvirtual BOOL InitInstance ()

class CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocppChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocpp

include ltafxwinhgtinclude HellohCMyApp myApp CMyApp member functionsBOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindowm_pMainWnd-gtShowWindow (m_nCmdShow)m_pMainWnd-gtUpdateWindow ()return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 6: LẬP TRÌNH WINDOWS

Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++Caacutec thagravenh phần trong ứng dụng Visual C++

Chương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircn

1048707 Ứng dụng đơn giản dugraveng Application Framework

1048707 Ứng dụng phức tạp hơn (Dialog-based App)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giảnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giản

1048707 Tạo ứng dụng

1048707 Caacutec thagravenh phần của chương trigravenh

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Chọn menu File rarr New

1048707 Chọn tab Projects

1048707 Chọn loại project ldquoWin32 Applicationrdquo

1048707 Đặt tecircn project vagrave xaacutec định đường dẫn thư mục trong

ocirc

ldquoLocationrdquo

1048707 Chọn loại ứng dụng ldquoAn empty projectrdquo

1048720Nhấn Finish để kết thuacutec

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Add caacutec file Helloh vagrave Hellocpp vagraveo project

1048707 Chọn menu Project rarr Settings

Chọn project trong cửa sổ becircn traacutei

Chọn tab General

Chọn ldquoUse MFC In A Shared DLLrdquo

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHellohChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHelloh

class CMyApp public CWinApp

publicvirtual BOOL InitInstance ()

class CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocppChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocpp

include ltafxwinhgtinclude HellohCMyApp myApp CMyApp member functionsBOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindowm_pMainWnd-gtShowWindow (m_nCmdShow)m_pMainWnd-gtUpdateWindow ()return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 7: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircnChương trigravenh MFC đầu tiecircn

1048707 Ứng dụng đơn giản dugraveng Application Framework

1048707 Ứng dụng phức tạp hơn (Dialog-based App)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giảnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giản

1048707 Tạo ứng dụng

1048707 Caacutec thagravenh phần của chương trigravenh

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Chọn menu File rarr New

1048707 Chọn tab Projects

1048707 Chọn loại project ldquoWin32 Applicationrdquo

1048707 Đặt tecircn project vagrave xaacutec định đường dẫn thư mục trong

ocirc

ldquoLocationrdquo

1048707 Chọn loại ứng dụng ldquoAn empty projectrdquo

1048720Nhấn Finish để kết thuacutec

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Add caacutec file Helloh vagrave Hellocpp vagraveo project

1048707 Chọn menu Project rarr Settings

Chọn project trong cửa sổ becircn traacutei

Chọn tab General

Chọn ldquoUse MFC In A Shared DLLrdquo

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHellohChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHelloh

class CMyApp public CWinApp

publicvirtual BOOL InitInstance ()

class CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocppChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocpp

include ltafxwinhgtinclude HellohCMyApp myApp CMyApp member functionsBOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindowm_pMainWnd-gtShowWindow (m_nCmdShow)m_pMainWnd-gtUpdateWindow ()return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 8: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giảnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản ứng dụng đơn giản

1048707 Tạo ứng dụng

1048707 Caacutec thagravenh phần của chương trigravenh

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Chọn menu File rarr New

1048707 Chọn tab Projects

1048707 Chọn loại project ldquoWin32 Applicationrdquo

1048707 Đặt tecircn project vagrave xaacutec định đường dẫn thư mục trong

ocirc

ldquoLocationrdquo

1048707 Chọn loại ứng dụng ldquoAn empty projectrdquo

1048720Nhấn Finish để kết thuacutec

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Add caacutec file Helloh vagrave Hellocpp vagraveo project

1048707 Chọn menu Project rarr Settings

Chọn project trong cửa sổ becircn traacutei

Chọn tab General

Chọn ldquoUse MFC In A Shared DLLrdquo

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHellohChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHelloh

class CMyApp public CWinApp

publicvirtual BOOL InitInstance ()

class CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocppChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocpp

include ltafxwinhgtinclude HellohCMyApp myApp CMyApp member functionsBOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindowm_pMainWnd-gtShowWindow (m_nCmdShow)m_pMainWnd-gtUpdateWindow ()return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 9: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Chọn menu File rarr New

1048707 Chọn tab Projects

1048707 Chọn loại project ldquoWin32 Applicationrdquo

1048707 Đặt tecircn project vagrave xaacutec định đường dẫn thư mục trong

ocirc

ldquoLocationrdquo

1048707 Chọn loại ứng dụng ldquoAn empty projectrdquo

1048720Nhấn Finish để kết thuacutec

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Add caacutec file Helloh vagrave Hellocpp vagraveo project

1048707 Chọn menu Project rarr Settings

Chọn project trong cửa sổ becircn traacutei

Chọn tab General

Chọn ldquoUse MFC In A Shared DLLrdquo

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHellohChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHelloh

class CMyApp public CWinApp

publicvirtual BOOL InitInstance ()

class CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocppChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocpp

include ltafxwinhgtinclude HellohCMyApp myApp CMyApp member functionsBOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindowm_pMainWnd-gtShowWindow (m_nCmdShow)m_pMainWnd-gtUpdateWindow ()return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 10: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng tạo ứng dụng

1048707 Add caacutec file Helloh vagrave Hellocpp vagraveo project

1048707 Chọn menu Project rarr Settings

Chọn project trong cửa sổ becircn traacutei

Chọn tab General

Chọn ldquoUse MFC In A Shared DLLrdquo

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHellohChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHelloh

class CMyApp public CWinApp

publicvirtual BOOL InitInstance ()

class CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocppChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocpp

include ltafxwinhgtinclude HellohCMyApp myApp CMyApp member functionsBOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindowm_pMainWnd-gtShowWindow (m_nCmdShow)m_pMainWnd-gtUpdateWindow ()return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 11: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHellohChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellohHelloh

class CMyApp public CWinApp

publicvirtual BOOL InitInstance ()

class CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocppChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocpp

include ltafxwinhgtinclude HellohCMyApp myApp CMyApp member functionsBOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindowm_pMainWnd-gtShowWindow (m_nCmdShow)m_pMainWnd-gtUpdateWindow ()return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 12: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocppChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash HellocppHellocpp

include ltafxwinhgtinclude HellohCMyApp myApp CMyApp member functionsBOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindowm_pMainWnd-gtShowWindow (m_nCmdShow)m_pMainWnd-gtUpdateWindow ()return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 13: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)Hellocpp(tt)

CMainWindow message map and member functionsBEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)

ON_WM_PAINT ()END_MESSAGE_MAP ()

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))void CMainWindowOnPaint ()

CPaintDC dc (this)CRect rectGetClientRect (amprect)dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE | DT_CENTER | DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 14: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quảChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash kết quảkết quả

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 15: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụngcaacutec class của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 16: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWinApp lớp chiacutenh của MFC để quản lyacute ứng

dụng Chứa đựng vograveng lặp nhận message vagrave phacircn

phối message đến caacutec cửa sổ của ứng dụng

CMyApp lớp kế thừa từ lớp CWinApp

class CMyApp public CWinApp

public

virtual BOOL InitInstance ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 17: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

InitInstance() hagravem khởi tạo ứng dụng

override lecircn hagravem chuẩn của lớp CWinApp

BOOL CMyAppInitInstance ()

m_pMainWnd = new CMainWindow

m_pMainWnd-gtShowWindow

(m_nCmdShow)

m_pMainWnd-gtUpdateWindow ()

return TRUE

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 18: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CWnd lớp chiacutenh của MFC để quản lyacute caacutec loại

cửa sổ giao diện Coacute nhiều lớp được kế thừa từ lớp

nagravey để quản lyacute caacutec loại cửa sổ khaacutec nhau

(CTreeCtrl CListBox Cedithellip)

CFrameWnd lớp kế thừa từ lớp CWnd để quản

lyacute cửa sổ giao diện chiacutenh của ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 19: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 20: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phầnChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phầncaacutec thagravenh phần

CMainWindow() hagravem khởi tạo cửa sổ giao diện của ứng dụng

override lecircn hagravem chuẩn của lớp CFrameWnd

CMainWindowCMainWindow ()

Create (NULL _T (The Hello Application))

OnPaint hagravem thagravenh phần của lớp CMainWindow được gọi khi cần

cập nhật nội dung cửa sổ Hagravem nagravey được định nghĩa chồng lecircn hagravem

chuẩn của lớp CFrameWnd

void CMainWindowOnPaint ()

CPaintDC dc(this)

CRect rect

GetClientRect (amprect)

dcDrawText (_T (Hello MFC) -1 amprect DT_SINGLELINE brvbar

DT_CENTER brvbar DT_VCENTER)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 21: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụngChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụngcaacutec bước thực thi ứng dụng

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 22: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổđăng kyacute lớp cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 23: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổtạo lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 24: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổHagravem lập cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 25: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham sốChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham sốHagravem lập cửa sổ - tham số

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 26: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổHagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 27: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổHiển thị cửa sổ

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 28: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệpVograveng lặp vagrave xử lyacute thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 29: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

MFC dugraveng Message Map để liecircn kết caacutec message

với những hagravem thagravenh phần của lớp cửa sổ

Aacutenh xạ thocircng điệp lagrave bảng tương quan giữa thocircng

điệp vagrave caacutec hagravem thagravenh phần quản lyacute caacutec thocircng điệp

đoacute

Aacutenh xạ thocircng điệp được khai baacuteo như caacutec thagravenh

phần lớp khaacutec trong khai baacuteo lớpclass CMainWindow public CFrameWnd

publicCMainWindow ()

protectedafx_msg void OnPaint ()DECLARE_MESSAGE_MAP ()

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 30: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Mỗi message sẽ được xử lyacute bởi 1 hagravem thagravenh phần

tương ứng

Những thocircng điệp với tiền tố WM_XYZ sẽ được cagravei đặt

tương ứng với hagravemtheo qui tắc

o WM_ được chuyển thagravenh On

o XYZ được chuyển thagravenh chữ thường trừ kyacute tự đầu

Viacute dụ

o WM_PAINT sẽ được chuyển thagravenh OnPaint

o WM_MOUSEMOVE sẽ được chuyển thagravenh

OnMouseMove

o WM_LBUTTONDOWN sẽ được chuyển thagravenh

OnLButtonDown

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 31: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Khai baacuteo Message Map

class 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 ()

Cagravei đặt xử lyacute Message

BEGIN_MESSAGE_MAP (CMainWindow CFrameWnd)ON_WM_PAINT ()ON_WM_LBUTTONDOWN()

END_MESSAGE_MAP ()

void CMainWindowOnPaint()

void CMainWindowOnLButtonDown(UINT nFlags CPoint point)

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 32: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệpChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệpMessage Map ndash Aacutenh xạ thocircng điệp

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 33: LẬP TRÌNH WINDOWS

Chương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWNChương trigravenh MFC đầu tiecircn ndash Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN Xử lyacute thecircm message WM_LBUTTONDOWN

Bổ sung thecircm 1 hagravem thagravenh phần vagraveo khai baacuteo của lớp

CMainWindow

afx_msg void OnLButtonDown(UINT nFlags CPoint

point)

Bổ sung thecircm 1 macro vagraveo khai baacuteo Message Map

ON_WM_LBUTTONDOWN ()

Định nghĩa hagravem thagravenh phần OnLButtonDown

void CMainWindowOnLButtonDown(UINT nFlags CPoint

point)

MessageBox(Left button clicked Mouse

MB_OK)

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 34: LẬP TRÌNH WINDOWS

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn menu File rarr New

Chọn Tab Projects

Chọn loại project ldquoMFC AppWizard (exe)rdquo

Đặt tecircn project trong ocirc ldquoProject namerdquo

Xaacutec định đường dẫn thư mục trong ldquoLocationrdquo

Step 1 Chọn loại ứng dụng ldquoSingle Documentrdquo

Nhấn ldquoNextrdquo đến ldquoStep 4 of 6rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 35: LẬP TRÌNH WINDOWS

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn loại project ldquoMFC AppWizard (EXE)rdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 36: LẬP TRÌNH WINDOWS

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoSingle documentrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 37: LẬP TRÌNH WINDOWS

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNonerdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 38: LẬP TRÌNH WINDOWS

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 39: LẬP TRÌNH WINDOWS

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn option ldquoNextrdquo

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 40: LẬP TRÌNH WINDOWS

Tạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizardTạo ứng dụng MFC bằng APPWizard

Chọn ldquoFinishrdquo

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 41: LẬP TRÌNH WINDOWS

Xử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuộtXử lyacute thocircng điệp chuột

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 42: LẬP TRÌNH WINDOWS

Message Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizardMessage Map vagrave ClassWizard

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 43: LẬP TRÌNH WINDOWS

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnLButtonUp(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCViewOnMouseMove(nFlags point)

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 44: LẬP TRÌNH WINDOWS

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnLButtonUp(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 45: LẬP TRÌNH WINDOWS

Kết quảKết quảKết quảKết quả

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 46: LẬP TRÌNH WINDOWS

Hagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứngHagravem xử lyacute thocircng điệp chuột tương ứng

void CMouseViewOnLButtonDown(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultm_nStartX = pointxm_nStartY = pointyCViewOnLButtonDown(nFlags point)

void CMouseViewOnMouseMove(UINT nFlags CPoint point)

TODO Add your message handler code here andor call defaultCClientDC dc(this)dcMoveTo(m_nStartXm_nStartY)dcLineTo(pointxpointy)CViewOnLButtonUp(nFlags point)

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 47: LẬP TRÌNH WINDOWS

Kết quảKết quảKết quảKết quả

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 48: LẬP TRÌNH WINDOWS

Xử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboardXử lyacute Keyboard Xử lyacute Keyboard - - Thocircng điệp của keyboardThocircng điệp của keyboard

WM_KEYDOWN WM_KEYUP phaacutet sinh khi 1 phiacutem (khocircng phải

lagrave phiacutem hệ thống) được nhấn xuốngthả ra

o Hagravem xử lyacute tương ứng CWndOnKeyDown

CWndOnKeyUp

o wParam virtual-key code

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại phiacutem scan

code

extended keyhellip)

WM_CHAR lagrave kết quả phaacutet sinh do message WM_KEYDOWN

baacuteo hiệu 1 kyacute tự in được (printed character) đatilde được tạo ra

o Hagravem xử lyacute tương ứng CWndOnChar

o wParam matilde kyacute tự

o lParam chứa caacutec thocircng tin khaacutec (số lần lặp lại do nhấn giữ

phiacutem coacute phiacutem Alt nhấn kegravemhellip)

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 49: LẬP TRÌNH WINDOWS

Xử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụXử lyacute Keyboard Xử lyacute Keyboard - - Viacute dụViacute dụ

Viacute dụ Xử lyacute phiacutem nhấn

Mocirc tả khi user nhấn một phiacutem rarr hiển thị 1 MessageBox

thocircng baacuteo

Caacutec xử lyacute cần thiết

o WM_KEYDOWN harr OnKeyDown

oĐịnh nghĩa hagravem xử lyacute message WM_KEYDOWN

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 50: LẬP TRÌNH WINDOWS

Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu Xử lyacute Menu

1048707 Một vagravei khaacutei niệm

1048707 Tạo lập menu

1048707 Load vagrave hiển thị menu

1048707 Xử lyacute khi menu item được chọn

1048707 Thay đổi trạng thaacutei menu

1048707 Viacute dụ

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 51: LẬP TRÌNH WINDOWS

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Xử lyacute Menu Xử lyacute Menu - Một vagravei khaacutei niệm - Một vagravei khaacutei niệm

Menu bar thanh menu Bao gồm nhiều drop-down menu vagrave menu

item

Drop-down menu một phần của menu bar chứa caacutec menu item

hoặc caacutec drop-down menu khaacutec

VD File Edit hellip

Menu item tương ứng với 1 lệnh của chương trigravenh Mỗi menu item

được xaacutec định bằng 1 số nguyecircn phacircn biệt gọi lagrave item ID hay

command ID

VD Open Save hellip

Popup menu giống như drop-down menu nhưng coacute thể xuất hiện

ở vị triacute bất kỳ trecircn magraven higravenh (thường khi nhấn nuacutet phải mouse)

System menu chứa caacutec lệnh hệ thống điều khiển cửa sổ

VD Minimize Maximize Close hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 52: LẬP TRÌNH WINDOWS

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Thường coacute 2 caacutech chiacutenh để tạo menu

Tạo menu ở dạng resource của ứng dụng vagrave load vagraveo khi

chạy

Tạo trực tiếp bằng caacutec hagravem khi ứng dụng đang chạy

Lớp sử dụng để quản lyacute menu CMenu

Caacutec hagravem thagravenh phần CreateMenu InsertMenu hellip

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 53: LẬP TRÌNH WINDOWS

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

Xử lyacute Menu Xử lyacute Menu - Tạo lập menu- Tạo lập menu

File xxxrcIDR_MAINFRAME MENU PRELOAD DISCARDABLEBEGIN

POPUP ampFileBEGIN

MENUITEM ampNewtCtrl+N ID_FILE_NEWMENUITEM ampOpentCtrl+O ID_FILE_OPENMENUITEM SEPARATORMENUITEM Eampxit ID_APP_EXIT

ENDPOPUP ampEditBEGIN

MENUITEM ampUndotCtrl+Z ID_EDIT_UNDOMENUITEM SEPARATORMENUITEM CuampttCtrl+X ID_EDIT_CUTMENUITEM ampCopytCtrl+C ID_EDIT_COPYMENUITEM ampPastetCtrl+V ID_EDIT_PASTE

ENDEND

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 54: LẬP TRÌNH WINDOWS

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xử lyacute Menu Xử lyacute Menu - Load vagrave hiển thị menu- Load vagrave hiển thị menu

Xaacutec đị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

menuLoadMenu(IDR_MAINFRAME)

SetMenu(ampmenu)

menuDetach()

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 55: LẬP TRÌNH WINDOWS

Message BoxMessage BoxMessage BoxMessage Box

Hộp thocircng baacuteo được sử dụng để thocircng baacuteo trao đổi giữa ứng dụng với người dugraveng

Để tạo lập hộp thocircng baacuteo ta sử dụng hagravem MessageBox

CWndint MessageBox (LPCTSTR lpszText LPCTSTR lpszCaption = NULL UINT nType = MB_OK)

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 56: LẬP TRÌNH WINDOWS

Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứngCaacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng

Type Buttons Return Codes

MB_ABORTRETRYIGNORE

Abort Retry Ignore

IDABORT IDRETRY IDIGNORE

MB_OK OK IDOK

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

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 57: LẬP TRÌNH WINDOWS

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoAre you sure you want to delete these 2 itemsrdquo ldquoConfirm Multiple File Deleterdquo MB_YESNO)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 58: LẬP TRÌNH WINDOWS

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Word rdquo MB_YESNOCANCEL)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 59: LẬP TRÌNH WINDOWS

Message Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteoMessage Box Message Box - - Caacutec kiểu biểu tượng trong hộp thocircng baacuteoCaacutec kiểu biểu tượng trong hộp thocircng baacuteo

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 60: LẬP TRÌNH WINDOWS

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to continuerdquo ldquoMy Applicationrdquo MB_YESNO | MB_ICONQUESTION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNO

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61
Page 61: LẬP TRÌNH WINDOWS

Message Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụMessage Box - Viacute dụ

Để tạo lập hộp thocircng baacuteo trecircn ta sử dụng hagravem MessageBox như sau

int nRes = MessageBox (ldquoDo you want to save the changes to Document1rdquo ldquoMicrosoft Office Wordrdquo MB_YESNOCANCEL | MB_ICONEXCLAMATION)

Chọn ldquoYesrdquo rarr nRes =IDYES Chọn ldquoNordquo rarr nRes = IDNOChọn ldquoCancelrdquo rarr nRes = IDCANCEL

  • LẬP TRIgraveNH WINDOWS
  • Nội dung
  • Slide 3
  • Giới thiệu về MFC
  • Slide 5
  • Caacutec thagravenh phần trong ứng dụng Visual C++
  • Chương trigravenh MFC đầu tiecircn
  • Chương trigravenh MFC đầu tiecircn ndash ứng dụng đơn giản
  • Chương trigravenh MFC đầu tiecircn ndash tạo ứng dụng
  • Slide 10
  • Chương trigravenh MFC đầu tiecircn ndash Helloh
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp
  • Chương trigravenh MFC đầu tiecircn ndash Hellocpp(tt)
  • Chương trigravenh MFC đầu tiecircn ndash kết quả
  • Chương trigravenh MFC đầu tiecircn ndash caacutec class của ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash caacutec thagravenh phần
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Chương trigravenh MFC đầu tiecircn ndash caacutec bước thực thi ứng dụng
  • Chương trigravenh MFC đầu tiecircn ndash đăng kyacute lớp cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash tạo lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - tham số
  • Chương trigravenh MFC đầu tiecircn ndash Hagravem lập cửa sổ - caacutec kiểu daacuteng cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Hiển thị cửa sổ
  • Chương trigravenh MFC đầu tiecircn ndash Vograveng lặp vagrave xử lyacute thocircng điệp
  • Chương trigravenh MFC đầu tiecircn ndash Message Map ndash Aacutenh xạ thocircng điệp
  • Slide 30
  • Slide 31
  • Slide 32
  • Chương trigravenh MFC đầu tiecircn ndash Xử lyacute thecircm message WM_LBUTTONDOWN
  • Tạo ứng dụng MFC bằng APPWizard
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Xử lyacute thocircng điệp chuột
  • Message Map vagrave ClassWizard
  • Hagravem xử lyacute thocircng điệp chuột tương ứng
  • Slide 44
  • Kết quả
  • Slide 46
  • Slide 47
  • Xử lyacute Keyboard - Thocircng điệp của keyboard
  • Xử lyacute Keyboard - Viacute dụ
  • Xử lyacute Menu
  • Xử lyacute Menu - Một vagravei khaacutei niệm
  • Xử lyacute Menu - Tạo lập menu
  • Slide 53
  • Xử lyacute Menu - Load vagrave hiển thị menu
  • Message Box
  • Caacutec kiểu hộp thocircng baacuteo vagrave giaacute trị trả về tương ứng
  • Message Box - Viacute dụ
  • Slide 58
  • Message Box - Caacutec kiểu biểu tượng trong hộp thocircng baacuteo
  • Slide 60
  • Slide 61