Cả hai phần là cần thiết để thêm trình xử lý tin nhắn vào một lớp. Bản đồ thư phải được khai báo bên trong lớp của bạn, cùng với các khai báo cho bất kỳ hàm xử lý thư nào (ví dụ: OnSize
).
class CClassWnd : public CBaseClassWnd {
...
afx_msg void OnSize(UINT nType, int cx, int cy);
DECLARE_MESSAGE_MAP
};
afx_msg
chỉ là macro giữ chỗ trống - không thực sự làm bất kỳ điều gì, nhưng luôn được bao gồm theo quy ước.
Bản đồ thông điệp sau đó được xác định trong tập tin cpp của lớp:
BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
ON_WM_SIZE()
END_MESSAGE_MAP()
Những macro tạo ra một bảng tra cứu cho các lớp cho phép các thông điệp nhận được cửa sổ để được cử đến các chức năng xử lý tương ứng. Macro ON_WM_SIZE
cho phép thông số wParam
và lParam
tin nhắn trong thông báo WM_SIZE
được giải mã thành các giá trị có ý nghĩa hơn cho hàm xử lý thông báo (nType
, cx
và cy
trong trường hợp này). MFC cung cấp macro cho hầu hết các thông báo cửa sổ (WM_LBUTTONDOWN
, WM_DESTROY
, v.v ...).
Bạn có thể tìm thêm thông tin về cách bản đồ thông báo hoạt động trong MFC here trên MSDN.
Rất vui khi biết điều đó, điều mà tôi đã tự hỏi trong một thời gian. Có lẽ tôi chỉ có quá nhiều thời gian trên tay mình ...;) –