📜  MFC-消息和事件(1)

📅  最后修改于: 2023-12-03 15:02:56.321000             🧑  作者: Mango

MFC-消息和事件

MFC 是 Microsoft Foundation Classes 的缩写,是一套为了让 Windows 应用程序开发更简单的类库。在 MFC 中,消息和事件是应用程序中非常重要的概念。

消息

在 Windows 中,事件是通过消息(message)来传递的。消息可以说是 Windows 系统中最基本、最广泛的一种事件。在 MFC 中,消息是通过消息映射(message map)来处理的。

消息映射

消息映射是一种机制,用于将消息与相应的处理函数关联起来。MFC 使用宏来创建消息映射,如下所示:

BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
    ON_WM_PAINT()
    ON_WM_DESTROY()
END_MESSAGE_MAP()

上述代码定义了 CMyWnd 类的消息映射,其中 ON_WM_PAINTON_WM_DESTROY 是宏,表示将 WM_PAINTWM_DESTROY 消息与 CMyWnd 类中的处理函数相关联。

消息处理函数

在 MFC 中,处理消息的代码通常被放在类的成员函数中,这些成员函数称为消息处理函数。消息处理函数的命名格式为 afx_msg void [函数名]( WPARAM wParam, LPARAM lParam ),其中 afx_msg 是宏,表示消息处理函数。

以下是一个示例:

afx_msg void OnPaint();

上述代码定义了一个名为 OnPaint 的消息处理函数。

事件

事件是 Windows 应用程序中另一个重要的概念。与消息不同,事件是由应用程序自身触发的。在 MFC 中,事件是通过事件映射(event map)来处理的。

事件映射

与消息映射类似,事件映射是一种机制,用于将事件与相应的处理函数关联起来。MFC 也使用宏来创建事件映射,如下所示:

BEGIN_EVENT_MAP(CMyDialog, CDialogEx)
    // 映射 BN_CLICKED 事件到 OnButtonClicked 处理函数
    ON_BN_CLICKED(IDC_MY_BUTTON, &CMyDialog::OnButtonClicked)
END_EVENT_MAP()

上述代码定义了 CMyDialog 类的事件映射,将 IDC_MY_BUTTON 控件的 BN_CLICKED 事件与 CMyDialog 类中的 OnButtonClicked 处理函数相关联。

事件处理函数

与消息处理函数类似,事件处理函数是用于处理事件的成员函数。MFC 使用DECLARE_EVENT_MAP 宏和 DECLARE_EVENT_HANDLER 宏来定义事件处理函数,如下所示:

class CMyDialog : public CDialogEx
{
    DECLARE_EVENT_MAP()

    void OnButtonClicked();
};

BEGIN_EVENT_MAP(CMyDialog, CDialogEx)
    ON_BN_CLICKED(IDC_MY_BUTTON, &CMyDialog::OnButtonClicked)
END_EVENT_MAP()

DECLARE_EVENT_HANDLER(CMyDialog, OnButtonClicked)

以上代码定义了 CMyDialog 类的 OnButtonClicked 事件处理函数。其中 DECLARE_EVENT_MAP 宏定义了事件映射,DECLARE_EVENT_HANDLER 宏定义了事件处理函数。

总结

在 MFC 中,消息和事件是非常重要的概念。了解消息和事件的使用方法,可以帮助程序员更好地理解 MFC 库以及开发 Windows 应用程序。