MFC - Tin nhắn & Sự kiện
Một ứng dụng được tạo từ các đối tượng khác nhau. Hầu hết thời gian, nhiều ứng dụng đang chạy trên máy tính và hệ điều hành liên tục được yêu cầu thực hiện một số nhiệm vụ. Bởi vì có thể có rất nhiều yêu cầu được đưa ra một cách không thể đoán trước, hệ điều hành sẽ giao nó cho các đối tượng để chỉ định những gì họ muốn, khi nào họ muốn và hành vi hoặc kết quả mà họ mong đợi.
Tổng quat
Hệ điều hành Microsoft Windows không thể dự đoán những loại yêu cầu mà một đối tượng sẽ cần được thực hiện và loại gán cho đối tượng khác sẽ cần.
Để quản lý tất cả các nhiệm vụ và yêu cầu này, các đối tượng gửi tin nhắn.
Mỗi đối tượng có trách nhiệm quyết định gửi thông điệp gì và gửi khi nào.
Để gửi một tin nhắn, một điều khiển phải tạo một sự kiện.
Để phân biệt giữa hai điều này, tên của một thông báo thường bắt đầu bằng WM_ viết tắt của Window Message.
Tên của một sự kiện thường bắt đầu bằng Bật biểu thị một hành động.
Sự kiện là hành động gửi tin nhắn.
Bản đồ tin nhắn
Vì Windows là một hệ điều hành hướng thông điệp, phần lớn lập trình cho môi trường Windows liên quan đến việc xử lý thông báo. Mỗi khi một sự kiện như nhấn phím hoặc nhấp chuột xảy ra, một thông báo sẽ được gửi đến ứng dụng, ứng dụng này sau đó phải xử lý sự kiện đó.
Đối với trình biên dịch để quản lý các thông báo, chúng nên được đưa vào định nghĩa lớp.
Các DECLARE_MESSAGE_MAP macro nên được cung cấp ở cuối định nghĩa lớp như được hiển thị trong đoạn mã sau.
class CMainFrame : public CFrameWnd {
public:
CMainFrame();
protected:
DECLARE_MESSAGE_MAP()
};
Các thư thực tế sẽ được liệt kê ngay phía trên dòng DECLARE_MESSAGE_MAP.
Để triển khai các thông báo, bạn cần tạo một bảng thông báo mà chương trình của bạn đang sử dụng.
Bảng này sử dụng hai macro phân tách;
Nó bắt đầu bằng một BEGIN_MESSAGE_MAP và kết thúc bằng một END_MESSAGE_MAP macro.
Macro BEGIN_MESSAGE_MAP nhận hai đối số, tên lớp của bạn và lớp MFC mà bạn lấy từ lớp của mình như được hiển thị trong đoạn mã sau.
#include <afxwin.h>
class CMainFrame : public CFrameWnd {
public:
CMainFrame();
protected:
DECLARE_MESSAGE_MAP()
};
CMainFrame::CMainFrame() {
// Create the window's frame
Create(NULL, L"MFC Messages Demo", WS_OVERLAPPEDWINDOW,
CRect(120, 100, 700, 480), NULL);
}
class CMessagesApp : public CWinApp {
public:
BOOL InitInstance();
};
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
END_MESSAGE_MAP()
BOOL CMessagesApp::InitInstance(){
m_pMainWnd = new CMainFrame;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMessagesApp theApp;
Chúng ta hãy xem xét một ví dụ đơn giản bằng cách tạo một dự án Win32 mới.
Step 1 - Để tạo một dự án MFC, nhấp chuột phải vào dự án và chọn Thuộc tính.
Step 2 - Ở phần bên trái, nhấp vào Thuộc tính cấu hình → Chung.
Step 3 - Chọn tùy chọn 'Use MFC in Shared DLL' trong phần Project Defaults và nhấn OK.
Step 4 - Chúng ta cần thêm một tệp nguồn mới.
Step 5 - Nhấp chuột phải vào Dự án của bạn và chọn Thêm → Mục mới.
Step 6 - Trong phần Mẫu, nhấp vào Tệp C ++ (.cpp).
Step 7 - Nhấp vào Thêm để tiếp tục.
Step 8 - Bây giờ, thêm đoạn mã sau vào tệp * .cpp.
#include <afxwin.h>
class CMainFrame : public CFrameWnd {
public:
CMainFrame();
protected:
DECLARE_MESSAGE_MAP()
};
CMainFrame::CMainFrame() {
// Create the window's frame
Create(NULL, L"MFC Messages Demo", WS_OVERLAPPEDWINDOW,
CRect(120, 100, 700, 480), NULL);
}
class CMessagesApp : public CWinApp {
public:
BOOL InitInstance();
};
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
END_MESSAGE_MAP()
BOOL CMessagesApp::InitInstance() {
m_pMainWnd = new CMainFrame;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMessagesApp theApp;
Tin nhắn Windows
Có nhiều loại thông báo Windows khác nhau như tạo cửa sổ, hiển thị cửa sổ, v.v. Dưới đây là một số thông báo Windows thường được sử dụng.
Thông điệp | Mục nhập bản đồ | Sự miêu tả |
---|---|---|
WM_ACTIVATE | ON_WM_ACTIVATE () | Khuôn khổ gọi hàm thành viên này khi một đối tượng CWnd đang được kích hoạt hoặc hủy kích hoạt. |
WM_ACTIVATEA PP | ON_WM_ACTIVATEAPP () | Khuôn khổ gọi chức năng thành viên này cho tất cả các cửa sổ cấp cao nhất của nhiệm vụ đang được kích hoạt và cho tất cả các cửa sổ cấp cao nhất của tác vụ đang được hủy kích hoạt. |
WM_APPCOMM VÀ | ON_WM_APPCOMMAND () | Khuôn khổ gọi hàm thành viên này khi người dùng tạo một sự kiện lệnh ứng dụng. |
WM_CANCELMODE | WM_CANCELMODE () | Khuôn khổ gọi chức năng thành viên này để thông báo cho CWnd hủy bất kỳ chế độ nội bộ nào. |
WM_CHILDACTIVATE | ON_WM_CHILDACTIVATE () | Nếu đối tượng CWnd là cửa sổ con nhiều giao diện tài liệu (MDI), thì OnChildActivate được gọi bởi khung khi người dùng nhấp vào thanh tiêu đề của cửa sổ hoặc khi cửa sổ được kích hoạt, di chuyển hoặc định kích thước. |
WM_CLIPBOAR DUPDATE | ON_WM_CLIPBOARDUPDATE () | Khuôn khổ gọi hàm thành viên này khi nội dung của khay nhớ tạm đã thay đổi. |
WM_CLOSE | ON_WM_CLOSE () | Khuôn khổ gọi chức năng thành viên này như một tín hiệu rằng CWnd hoặc một ứng dụng sẽ kết thúc. |
WM_CONTEXTMENU | ON_WM_CONTEXTMENU () | Được gọi bởi khuôn khổ khi người dùng đã nhấp vào nút chuột phải (nhấp chuột phải) trong cửa sổ. |
WM_COPYDATA | ON_WM_COPYDATA () | Chức năng thành viên này được gọi bởi khuôn khổ để sao chép dữ liệu từ ứng dụng này sang ứng dụng khác. |
WM_CREATE | ON_WM_CREATE () | Khuôn khổ gọi hàm thành viên này khi ứng dụng yêu cầu tạo cửa sổ Windows bằng cách gọi hàm thành viên Create hoặc CreateEx. |
WM_CTLCOLOR | ON_WM_CTLCOLOR () | Khung này gọi hàm thành viên này khi một điều khiển con sắp được vẽ. |
WM_DELETEITEM | ON_WM_DELETEITEM () | Khuôn khổ gọi hàm thành viên này để thông báo cho chủ sở hữu của một hộp danh sách hoặc hộp tổ hợp có chủ sở hữu rằng hộp danh sách hoặc hộp tổ hợp đã bị phá hủy hoặc các mục đã bị loại bỏ. |
WM_DESTROY | ON_WM_DESTROY () | ông ta gọi hàm thành viên này để thông báo cho đối tượng CWnd rằng nó đang bị phá hủy. |
WM_DRAWITEM | ON_WM_DRAWITEM () | Khuôn khổ gọi chức năng thành viên này cho chủ sở hữu của điều khiển nút kéo chủ sở hữu, điều khiển hộp tổ hợp, điều khiển hộp danh sách hoặc menu khi khía cạnh trực quan của điều khiển hoặc menu đã thay đổi. |
WM_DROPFILES | ON_WM_DROPFILES () | Khuôn khổ gọi chức năng thành viên này khi người dùng thả chuột trái qua cửa sổ đã đăng ký chính nó là người nhận các tệp bị đánh rơi. |
WM_ENABLE | ON_WM_ENABLE () | Khuôn khổ gọi hàm thành viên này khi một ứng dụng thay đổi trạng thái được kích hoạt của đối tượng CWnd. Cú pháp. |
WM_HELPINFO | ON_WM_HELPINFO () | Xử lý Trợ giúp F1 trong ứng dụng (sử dụng ngữ cảnh hiện tại). |
WM_HOTKEY | ON_WM_HOTKEY () | Khung gọi chức năng thành viên này khi người dùng nhấn phím nóng trên toàn hệ thống. |
WM_HSCROLL | ON_WM_HSCROLL () | Khung này gọi hàm thành viên này khi người dùng nhấp vào thanh cuộn ngang của cửa sổ. |
WM_KEYDOWN | ON_WM_KEYDOWN () | Khung gọi chức năng thành viên này khi một phím không hệ thống được nhấn. |
WM_KEYUP | ON_WM_KEYUP () | Khuôn khổ gọi chức năng thành viên này khi một khóa không hệ thống được phát hành. |
WM_KILLFOCUS | ON_WM_KILLFOCUS () | Khuôn khổ gọi chức năng thành viên này ngay lập tức trước khi mất tiêu điểm đầu vào. |
WM_LBUTTONDBLCLK | ON_WM_LBUTTONDBLCLK () | Khuôn khổ gọi chức năng thành viên này khi người dùng nhấp đúp chuột trái. |
WM_LBUTTONDOWN | ON_WM_LBUTTONDOWN () | Khung gọi chức năng thành viên này khi người dùng nhấn nút trái chuột. |
WM_LBUTTONUP | ON_WM_LBUTTONUP () | Khung này gọi hàm thành viên này khi người dùng thả chuột trái. |
WM_MBUTTONDBLCLK | ON_WM_MBUTTONDBLCLK () | Khung này gọi hàm thành viên này khi người dùng nhấp đúp chuột giữa. |
WM_MBUTTONDOWN | ON_WM_MBUTTONDOWN () | Khung gọi chức năng thành viên này khi người dùng nhấn nút chuột giữa. |
WM_MBUTTONUP | ON_WM_MBUTTONUP () | Khuôn khổ gọi chức năng thành viên này khi người dùng thả chuột giữa. |
WM_MENUSELECT | ON_WM_MENUSELECT () | Nếu đối tượng CWnd được liên kết với một menu, OnMenuSelect được gọi bởi khuôn khổ khi người dùng chọn một mục menu. |
WM_MOUSEACTIVATE | ON_WM_MOUSEACTIVATE () | Khung này gọi hàm thành viên này khi con trỏ ở trong cửa sổ không hoạt động và người dùng nhấn nút chuột. |
WM_MOUSEHOVER | ON_WM_MOUSEHOVER () | Khuôn khổ gọi hàm thành viên này khi con trỏ di chuột qua vùng máy khách của cửa sổ trong khoảng thời gian được chỉ định trong lần gọi trước tới TrackMouseEvent. |
WM_MOUSEHWHEEL | ON_WM_MOUSEHWHEEL () | Khuôn khổ gọi thành viên này khi cửa sổ hiện tại được tạo bởi Trình quản lý cửa sổ trên màn hình (DWM) và cửa sổ đó được phóng to. |
WM_MOUSELEAVE | ON_WM_MOUSELEAVE () | Khuôn khổ gọi hàm thành viên này khi con trỏ rời khỏi vùng máy khách của cửa sổ được chỉ định trong lần gọi trước tới TrackMouseEvent. |
WM_MOUSEMOVE | ON_WM_MOUSEMOVE () | Khung này gọi hàm thành viên này khi con trỏ chuột di chuyển. |
WM_MOVE | ON_WM_MOVE () | Khuôn khổ gọi hàm thành viên này sau khi đối tượng CWnd đã được di chuyển. |
WM_PAINT | ON_WM_PAINT () | Khuôn khổ gọi hàm thành viên này khi Windows hoặc một ứng dụng đưa ra yêu cầu sơn lại một phần cửa sổ của ứng dụng. |
WM_SETFOCUS () | ON_WM_SETFOCUS () | Khung này gọi hàm thành viên này sau khi đạt được tiêu điểm đầu vào. |
WM_SIZE () | ON_WM_SIZE () | Khuôn khổ gọi hàm thành viên này sau khi kích thước của cửa sổ đã thay đổi. |
WM_TIMER | ON_WM_TIMER () | Khuôn khổ gọi hàm thành viên này sau mỗi khoảng thời gian được chỉ định trong hàm thành viên SetTimer được sử dụng để cài đặt bộ đếm thời gian. |
WM_VSCROLL | ON_WM_VSCROLL () | Khung này gọi hàm thành viên này khi người dùng nhấp vào thanh cuộn dọc của cửa sổ. |
WM_WINDOWPOSCHANGED | ON_WM_WINDOWPOSCHANGED () | Khuôn khổ gọi hàm thành viên này khi kích thước, vị trí hoặc thứ tự Z đã thay đổi do lệnh gọi hàm thành viên SetWindowPos hoặc một hàm quản lý cửa sổ khác. |
Chúng ta hãy xem xét một ví dụ đơn giản về tạo cửa sổ.
WM_CREATE - Khi một đối tượng, được gọi là cửa sổ, được tạo, khung tạo các đối tượng sẽ gửi một thông báo được xác định là ON_WM_CREATE.
Step 1- Để tạo ON_WM_CREATE, thêm afx_msg int OnCreate (LPCREATESTRUCT lpCreateStruct); trước DECLARE_MESSAGE_MAP () như hình dưới đây.
class CMainFrame : public CFrameWnd {
public:
CMainFrame();
protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
DECLARE_MESSAGE_MAP()
};
Step 2 - Thêm ON_WM_CREATE () sau BEGIN_MESSAGE_MAP (CMainFrame, CFrameWnd) và trước END_MESSAGE_MAP ()
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
END_MESSAGE_MAP()
Step 3 - Đây là việc triển khai OnCreate ()
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
// Call the base class to create the window
if (CFrameWnd::OnCreate(lpCreateStruct) == 0) {
// If the window was successfully created, let the user know
MessageBox(L"The window has been created!!!");
// Since the window was successfully created, return 0
return 0;
}
// Otherwise, return -1
return -1;
}
Step 4 - Bây giờ tệp * .cpp của bạn sẽ giống như trong đoạn mã sau.
#include <afxwin.h>
class CMainFrame : public CFrameWnd {
public:
CMainFrame();
protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
DECLARE_MESSAGE_MAP()
};
CMainFrame::CMainFrame() {
// Create the window's frame
Create(NULL, L"MFC Messages Demo", WS_OVERLAPPEDWINDOW,
CRect(120, 100, 700, 480), NULL);
}
class CMessagesApp : public CWinApp {
public:
BOOL InitInstance();
};
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
END_MESSAGE_MAP()
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
// Call the base class to create the window
if (CFrameWnd::OnCreate(lpCreateStruct) == 0) {
// If the window was successfully created, let the user know
MessageBox(L"The window has been created!!!");
// Since the window was successfully created, return 0
return 0;
}
// Otherwise, return -1
return -1;
}
BOOL CMessagesApp::InitInstance() {
m_pMainWnd = new CMainFrame;
m_pMainWnd -> ShowWindow(SW_SHOW);
m_pMainWnd -> UpdateWindow();
return TRUE;
}
CMessagesApp theApp;
Step 5 - Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả như sau.
Step 6 - Khi bạn bấm OK, nó sẽ hiển thị cửa sổ chính.
Thông báo lệnh
Một trong những tính năng chính của ứng dụng đồ họa là trình bày các điều khiển và tài nguyên Windows cho phép người dùng tương tác với máy. Ví dụ về các điều khiển mà chúng ta sẽ học là các nút, hộp danh sách, hộp tổ hợp, v.v.
Một loại tài nguyên mà chúng tôi đã giới thiệu trong bài trước là menu. Các điều khiển và tài nguyên như vậy có thể khởi tạo thông báo của riêng chúng khi người dùng nhấp vào chúng. Thông báo phát ra từ điều khiển Windows hoặc tài nguyên được gọi là thông báo lệnh.
Chúng ta hãy xem xét một ví dụ đơn giản về thông điệp Lệnh.
Để cung cấp cho ứng dụng của bạn khả năng tạo một tài liệu mới, lớp CWinApp cung cấp phương thức OnFileNew ().
afx_msg void OnFileNew();
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_COMMAND(ID_FILE_NEW, CMainFrame::OnFileNew)
END_MESSAGE_MAP()
Đây là định nghĩa phương pháp -
void CMainFrame::OnFileNew() {
// Create New file
}
Tin nhắn bàn phím
A keyboardlà một đối tượng phần cứng gắn liền với máy tính. Theo mặc định, nó được sử dụng để nhập các ký hiệu, chữ cái và các ký tự khác có thể nhận dạng được trên một điều khiển. Mỗi phím trên bàn phím hiển thị một ký hiệu, một chữ cái hoặc kết hợp của các phím đó, để cho biết phím đó có thể được sử dụng để làm gì. Người dùng thường nhấn một phím để gửi tín hiệu đến một chương trình.
Mỗi khóa có một mã mà hệ điều hành có thể nhận ra. Mã này được gọi làvirtual key code.
Sr.No. | Hằng số / giá trị & Mô tả |
---|---|
1 | VK_LBUTTON Nút chuột trái |
2 | VK_RBUTTON Nút chuột phải |
3 | VK_CANCEL Xử lý ngắt kiểm soát |
4 | VK_MBUTTON Nút chuột giữa (chuột ba nút) |
5 | VK_BACK Phím xóa |
6 | VK_RETURN Phím ENTER |
7 | VK_TAB Phím Tab |
số 8 | VK_CLEAR Phím xóa |
9 | VK_SHIFT Phím Shift |
10 | VK_CONTROL Phím CTRL |
11 | VK_MENU Phím ALT |
12 | VK_PAUSE Phím PAUSE |
13 | VK_CAPITAL Phím CAPS LOCK |
14 | VK_ESCAPE Khóa ESC |
15 | VK_SPACE Phím cách |
16 | VK_PRIOR Phím TRANG LÊN |
17 | VK_NEXT Phím TRANG XUỐNG |
18 | VK_END Phím KẾT THÚC |
19 | VK_HOME Chìa khóa nhà |
20 | VK_LEFT Phím MŨI TÊN TRÁI |
21 | VK_UP Phím mũi tên chỉ lên |
22 | VK_RIGHT Phím MŨI TÊN PHẢI |
23 | VK_DOWN Phím MŨI TÊN XUỐNG |
24 | VK_SELECT CHỌN phím |
25 | VK_PRINT Phím IN |
26 | VK_EXECUTE Phím THỰC HIỆN |
27 | VK_SNAPSHOT Phím IN MÀN HÌNH |
28 | VK_INSERT Phím INS |
29 | VK_DELETE Phím DEL |
30 | VK_NUMPAD0 Bàn phím số 0 Phím |
31 | VK_NUMPAD1 Bàn phím số 1 phím |
32 | VK_NUMPAD2 Bàn phím số 2 phím |
33 | VK_NUMPAD3 Bàn phím số 3 phím |
34 | VK_NUMPAD4 Bàn phím số 4 phím |
35 | VK_NUMPAD5 Bàn phím số 5 phím |
36 | VK_NUMPAD6 Bàn phím số 6 phím |
37 | VK_NUMPAD7 Bàn phím số 7 phím |
38 | VK_NUMPAD8 Bàn phím số 8 phím |
39 | VK_NUMPAD9 Bàn phím số 9 phím |
40 | VK_MULTIPLY Phím nhân |
41 | VK_ADD Thêm khóa |
42 | VK_SEPARATOR Phím phân cách |
43 | VK_SUBTRACT Trừ khóa |
44 | VK_DECIMAL Khóa thập phân |
45 | VK_DIVIDE Chìa khóa chia |
46 | VK_F1 Phím F1 |
47 | VK_F2 Phím F2 |
48 | VK_F3 Phím F3 |
49 | VK_F4 Phím F4 |
50 | VK_F5 Phím F5 |
52 | VK_F6 Phím F6 |
53 | VK_F7 Phím F7 |
54 | VK_F8 Phím F8 |
55 | VK_F9 Phím F9 |
56 | VK_F10 Phím F10 |
57 | VK_F11 Phím F11 |
58 | VK_F12 Phím F12 |
59 | VK_NUMLOCK Khóa NUM LOCK |
60 | VK_SCROLL Phím SCROLL LOCK |
61 | VK_LSHIFT Phím SHIFT trái |
62 | VK_RSHIFT Phím SHIFT phải |
63 | VK_LCONTROL Phím CONTROL bên trái |
64 | VK_RCONTROL Phím ĐIỀU KHIỂN bên phải |
Nhấn một phím sẽ đưa thông báo WM_KEYDOWN hoặc WM_SYSKEYDOWN vào tin nhắn chuỗi. Điều này có thể được định nghĩa như sau:
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
Chúng ta hãy xem xét một ví dụ đơn giản.
Step 1 - Đây là tin nhắn.
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_WM_KEYDOWN()
END_MESSAGE_MAP()
Step 2 - Đây là phần triển khai của OnKeyDown ().
void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {
switch (nChar) {
case VK_RETURN:
MessageBox(L"You pressed Enter");
break;
case VK_F1:
MessageBox(L"Help is not available at the moment");
break;
case VK_DELETE:
MessageBox(L"Can't Delete This");
break;
default:
MessageBox(L"Whatever");
}
}
Step 3 - Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả như sau.
Step 4 - Khi bạn nhấn Enter, nó sẽ hiển thị thông báo sau.
Tin nhắn chuột
Chuột là một vật khác được gắn vào máy tính cho phép người dùng tương tác với máy.
Nếu nút chuột trái được nhấn, một thông báo ON_WM_LBUTTONDOWN sẽ được gửi. Cú pháp của tin nhắn này là -
afx_msg void OnLButtonDown (UINT nFlags, CPoint point)
Nếu nút chuột phải được nhấn, một thông báo ON_WM_RBUTTONDOWN sẽ được gửi. Cú pháp của nó là -
afx_msg void OnRButtonDown (UINT nFlags, CPoint point)
Tương tự Nếu chuột trái đang được thả, thông báo ON_WM_LBUTTONUP sẽ được gửi. Cú pháp của nó là -
afx_msg void OnLButtonUp (UINT nFlags, CPoint point)
Nếu thả chuột phải, thông báo ON_WM_TBUTTONUP sẽ được gửi. Cú pháp của nó là -
afx_msg void OnRButtonUp (UINT nFlags, CPoint point)
Chúng ta hãy xem xét một ví dụ đơn giản.
Step 1 - Thêm hai hàm sau trong định nghĩa lớp CMainFrame như được hiển thị trong đoạn mã sau.
class CMainFrame : public CFrameWnd {
public:
CMainFrame();
protected:
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};
Step 2 - Thêm hai Bản đồ tin nhắn sau.
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_KEYDOWN()
ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONUP()
END_MESSAGE_MAP()
Step 3 - Đây là định nghĩa các hàm.
void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point) {
CString MsgCoord;
MsgCoord.Format(L"Left Button at P(%d, %d)", point.x, point.y);
MessageBox(MsgCoord);
}
void CMainFrame::OnRButtonUp(UINT nFlags, CPoint point) {
MessageBox(L"Right Mouse Button Up");
}
Step 4 - Khi bạn chạy ứng dụng này, bạn sẽ thấy kết quả sau.
Step 5 - Khi bấm OK, bạn sẽ thấy thông báo sau.
Step 6- Nhấp chuột phải vào cửa sổ này. Bây giờ, khi bạn thả nút bên phải của chuột, nó sẽ hiển thị thông báo sau.