Bài giảng Lập trình Windows - Kỹ thuật lập trình Visual C++

Giới thiệu vềMFC

™Chương trình MFC đầu tiên

™Xửlý chuột và bàn phím

™Microsoft Visual C++ 6.0

™Các loại ứng dụng trong windows

™Message Box

pdf71 trang | Chuyên mục: Visual C++ | Chia sẻ: dkS00TYs | Lượt xem: 2319 | Lượt tải: 1download
Tóm tắt nội dung Bài giảng Lập trình Windows - Kỹ thuật lập trình Visual C++, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
zWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
CMainWindow
CMainWindow::CMainWindow ()
{ 
Create (NULL, _T ("The Hello Application")); 
}
Hàm tạo lập cửa sổ
CMainWindow
CMainWindow::CMainWindow ()
{ 
Create (NULL, _T ("The Hello Application")); 
}
BOOL Create (LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, 
DWORD dwStyle = WS_OVERLAPPEDWINDOW, 
const RECT& rect = rectDefault, 
CWnd* pParentWnd = NULL, 
LPCTSTR lpszMenuName = NULL, 
DWORD dwExStyle = 0,
CCreateContext* pContext = NULL)
Các tham số trong hàm tạo lập cửa sổ
Thuộc tính Ý nghĩa
lpszClassName Tên lớp cửa sổ
lpszWindowName Tiêu đồ cửa sổ 
dwStyle Kiểu dáng cửa sổ
rect Kích thước và vị trí ban đầu của cửa sổ
pParentWnd Cửa sổ cha, NULL cửa sổ không có cửa sổ cha 
lpszMenuName Thực đơn liên quan đến cửa sổ, NULL nghĩa làcửa sổ không có Menu 
dwExStyle Kiểu mở rộng của cửa sổ
pContext Sử dụng trong ứng dụng Documents/Views
Các kiểu dáng chuẩn của cửa sổ
Kiểu Ý nghĩa
WS_BORDER Tạo cửa sổ với khung mỏng
WS_CAPTION Tạo cửa sổ với thanh tiêu đề
WS_CHILD Tạo cửa sổ con, sử dụng để tạo điều khiển như phím và các cửa sổ con MDI
WS_OVERAPPEP Lập cửa sổ maximize và không có cửa sổ cha
WS_OVERAPPEPWI
NDOW
Lập cửa sổ với các kiểu: WS_OVERLAPPED, WS_CAPTION, 
WS_SYSMENU, WS_MAXIMIZEBOX, WS_MINIMIZEBOX, 
WS_DISABLED Cửa sổ sẽ bị vô hiệu lực
WS_DLGFRAME Cửa sổ có viền như dialog
WS_MAXIMIZE Cử sổ có Maximize
WS_MAXIMIZBOX Cửa sổ có nút maximize trên thanh tiêu đề
WS_HSCROLL Cửa sổ có thanh trượt ngang
WS_VSCROLL Cửa sổ có thanh trượt dọc
Hiển thị cửa sổ
WinMain
Đăng ký lớp cửa sổ
Tạo lập cửa sổ
Hiển thị cửa sổ
Message Loop
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
CMainWindow
BOOL CMyApp::InitInstance () 
{ 
m_pMainWnd = new CMainWindow; 
m_pMainWnd->ShowWindow 
(m_nCmdShow);
m_pMainWnd->UpdateWindow (); 
return TRUE; 
} 
Vòng lặp và xử lý thông điệp
WinMain
Đăng ký lớp cửa sổ
Tạo lập cửa sổ
Hiển thị cửa sổ
Message Loop
CMainWindow
Tiếp nhận và xử lý 
thông điệp như 
thế nào ?
while (GetMessage (&msg, NULL, 0, 0))
{ 
TranslateMessage (&msg);
DispatchMessage (&m g);
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, 
LPARAM lParam) 
{
PAINTSTRUCT ps; 
HDC hdc; 
switch (message) {
case WM_PAINT: 
hdc = BeginPaint (hwnd, &ps); 
Ellipse (hdc, 0, 0, 200, 100);
EndPaint (hwnd, &ps); 
return 0; 
case WM_DESTROY: 
PostQuitMessage (0); 
return 0;
} 
return DefWindowProc (hwnd, message, wParam, lParam); 
}
Message Map
Message Map – Ánh xạ thông điệp
™ Ánh xạ thông điệp là bảng tương quan giữa thông điệp và 
các hàm thành phần quản lý các thông điệp đó
™ Bất kỳ lớp nào suy diễn từ CCmdTarget đều có thể chứa ánh 
xạ thông điệp
class CMainWindow : public CFrameWnd 
{ 
public: 
CMainWindow (); 
protected: 
afx_msg void OnPaint (); 
DECLARE_MESSAGE_MAP () 
};
™ Ánh xạ thông điệp được khai báo như các thành phần lớp 
khác trong khai báo lớp
Message Map (tt)
™ Những thông điệp với tiền tố WM_XYZ sẽ được cài 
đặt tương ứng với hàm theo qui tắc
ƒ WM_ được chuyển thành On
ƒ XYZ được chuyển thành chữ thường trừ ký tự đầu
™ Ví dụ:
ƒ WM_PAINT sẽ được chuyển thành OnPaint
ƒ WM_MOUSEMOVE sẽ được chuyển thành OnMouseMove
ƒ WM_LBUTTONDOWN sẽ được chuyển thành OnLButtonDown
™Mỗi message sẽ được xử lý bởi 1 hàm thành 
phần tương ứng 
BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd) 
ON_WM_PAINT () 
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP ()
Void CMainWindow::OnPaint()
{
}
Void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point)
{
}
™Khai báo Message Map
™Cài đặt xử lý Message
class CMainWindow : public CFrameWnd 
{ 
public: 
CMainWindow (); 
protected: 
afx_msg void OnPaint (); 
afx_msg void OnLButtonDown(UINT, CPoint);
DECLARE_MESSAGE_MAP () 
};
Message Map (tt)
Message Afx function
WM_CHAR afx_msg void OnChar(UINT,UINT,UINT)
WM_CREATE afx_msg int OnCreate(LPCREATESTRUCT)
WM_DESTROY afx_msg void OnDestroy()
WM_LBUTTONDOWN afx_msg void OnLButtonDown(UINT, CPoint)
WM_LBUTTONUP afx_msg void OnLButtonUp(UINT, CPoint)
WM_MOUSEMOVE afx_msg void OnMouseMove(UINT, CPoint)
WM_RBUTTONDOWN afx_msg void OnRButtonDown(UINT, CPoint)
WM_RBUTTONUP afx_msg void OnRButtonUp(UINT, CPoint)
WM_SIZE afx_msg void OnSize()
WM_PAINT afx_msg void OnPaint()
Thông điệp WM_XXX và hàm MFC tương ứng
Xử lý thông điệp cửa sổ - Message Map
Tạo ứng dụng MFC bằng AppWizard
™ Chọn menu File Æ New
™ Chọn Tab Projects
™ Chọn loại project “MFC AppWizard (exe)”
™ Đặt tên project trong ô “Project name”
™ Xác định đường dẫn thư mục trong “Location”
™ Step 1: Chọn loại ứng dụng “Single Document”, bỏ 
option “Document/View architecture support”
™ Nhấn “Next” đến “Step 4 of 6”
Tạo ứng dụng MFC bằng AppWizard
Chọn loại project “MFC AppWizard (EXE)”
Tạo ứng dụng MFC bằng AppWizard
Chọn option “Single document”
Tạo ứng dụng MFC bằng AppWizard
Chọn option “None”
Tạo ứng dụng MFC bằng AppWizard
Tạo ứng dụng MFC bằng AppWizard
Tạo ứng dụng MFC bằng AppWizard
Tạo ứng dụng MFC bằng AppWizard
Ứng dụng MFC đầu tiên – File view
Ứng dụng MFC đầu tiên – Resource view
Ứng dụng MFC đầu tiên – Class view
Ứng dụng MFC đầu tiên – kết quả chương trình
™Giới thiệu về MFC
™Chương trình MFC đầu tiên
™ Xử lý chuột và bàn phím
™Microsoft Visual C++ 6.0
™Các loại ứng dụng trong windows
™Message Box 
NỘI DUNG
Xử lý thông điệp chuột
Message Afx function
WM_LBUTTONDOWN afx_msg void OnLButtonDown(UINT, CPoint)
WM_LBUTTONUP afx_msg void OnLButtonUp(UINT, CPoint)
WM_LBUTTONBLCLK
afx_msg void OnLButtonDblClk(UINT, CPoint)
WM_RBUTTONDOWN afx_msg void OnRButtonDown(UINT, CPoint)
WM_RBUTTONUP afx_msg void OnRButtonUp(UINT, CPoint)
WM_RBUTTONBLCLK afx_msg void OnRButtonDblClk(UINT, CPoint)
WM_MOUSEMOVE afx_msg void OnMouseMove(UINT, CPoint)
Message Map và ClassWizard
Hàm xử lý thông điệp chuột tương ứng
Hàm xử lý thông điệp chuột tương ứng
Hàm xử lý thông điệp chuột tương ứng
Hàm xử lý thông điệp chuột tương ứng
void CMouseView::OnLButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
CView::OnLButtonDown(nFlags, point);
}
void CMouseView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CView::OnLButtonUp(nFlags, point);
}
void CMouseView::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
CView::OnMouseMove(nFlags, point);
}
Hàm xử lý thông điệp chuột tương ứng
void CMouseView::OnLButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
m_nStartX = point.x;
m_nStartY = point.y;
CView::OnLButtonDown(nFlags, point);
}
void CMouseView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
dc.MoveTo(m_nStartX,m_nStartY);
dc.LineTo(point.x,point.y);
CView::OnLButtonUp(nFlags, point);
}
Kết quả xử lý thông điệp chuột
Hàm xử lý thông điệp chuột tương ứng
void CMouseView::OnLButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
m_nStartX = point.x;
m_nStartY = point.y;
CView::OnLButtonDown(nFlags, point);
}
void CMouseView::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
dc.MoveTo(m_nStartX,m_nStartY);
dc.LineTo(point.x,point.y);
CView::OnLButtonUp(nFlags, point);
}
Kết quả xử lý thông điệp chuột
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
™Microsoft Visual C++ 6.0
™Các loại ứng dụng trong windows
™Message Box 
Message Box - Hộp thông báo
™ Hộp thông báo được sử dụng để thông báo, trao 
đổi giữa ứng dụng với người dùng 
™ Để tạo lập hộp thông báo, ta sử dụng hàm 
MessageBox
Cwnd::int MessageBox (LPCTSTR lpszText, 
LPCTSTR lpszCaption = NULL, 
UINT nType = MB_OK)
Các kiểu hộp thông báo và giá trị trả về tương ứng
Type Buttons Possible Return Codes
MB_ABORTRETRYIGNORE Abort, Retry, 
Ignore
IDABORT, IDRETRY, 
IDIGNORE
MB_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 - Hộp thông báo
™ Để tạo lập hộp thông báo trên ta sử dụng hàm 
MessageBox như sau:
int nRes = MessageBox (“The file ‘Database Tip.doc’ is a read-only 
file. Are you sure you want to move it to the Recycle Bin ?”, 
“Confirm File Delete”, MB_YESNO)
™ Chọn “Yes” Æ nRes =IDYES
™ Chọn “No” Æ nRes = IDNO
Message Box - Hộp thông báo
™ Để tạo lập hộp thông báo trên ta sử dụng hàm 
MessageBox như sau:
int nRes = MessageBox (“Do you want to save the changes to 
Document1 ?”, “Microsoft Office Word”, MB_YESNOCANCEL)
™ Chọn “Yes” Æ nRes =IDYES
™ Chọn “No” Æ nRes = IDNO
™ Chọn “Cancel” Æ nRes = IDCANCEL
Các kiểu biểu tượng trong hộp thông báo
MB_ICONQUESTION MB_ICONINFORMATION
MB_ICONEXCLAMATIONMB_ICONSTOP
Message Box - Hộp thông báo
™ Để tạo lập hộp thông báo với Icon như trên ta sử dụng hàm 
MessageBox như sau:
int nRes = MessageBox (“Do you want to continue ?”, “My 
Application”, MB_YESNO | MB_ICONQUESTION )
Message Box - Hộp thông báo
™ Để tạo lập hộp thông báo với Icon như trên ta sử dụng hàm 
MessageBox như sau:
int nRes = MessageBox (“Do you want to save the changes to 
Document1 ?”, “Microsoft Office Word”, MB_YESNOCANCEL | 
MB_ICONEXCLAMATION )

File đính kèm:

  • pdfBài giảng Lập trình Windows - Kỹ thuật lập trình Visual C++.pdf