Upload
richard-hartman
View
63
Download
0
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Tạo ứng dụng MFC bằng APPWizardTạo ứng 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
Tạo ứng dụng MFC bằng APPWizardTạo ứng 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
Tạo ứng dụng MFC bằng APPWizardTạo ứng 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
Tạo ứng dụng MFC bằng APPWizardTạo ứng 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
Tạo ứng dụng MFC bằng APPWizardTạo ứng 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
Tạo ứng dụng MFC bằng APPWizardTạo ứng 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
Tạo ứng dụng MFC bằng APPWizardTạo ứng 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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