MFC中如何正确声明和实现函数

更新时间:2024-04-23 20:15:57   人气:6357
在Microsoft Foundation Classes (MFC)框架下编写C++应用程序时,正确地声明与实现在类中的成员函数至关重要。以下将详述这一过程。

**一、函数的声明**

1. **头文件(.h或.hpp)**

在对应的类(通常继承自`CWnd`, `CDialog`, 或其他MFC基类)的接口部分进行函数声明。例如,在名为“CTestDlg”的对话框类中添加一个处理按钮点击事件的OnButtonClicked函数:

cpp

// CTestDlg.h 文件内
class CTestDlg : public CDialogEx
{
// ...

public:
afx_msg void OnBn_CLICKED(UINT nID); // 声明消息映射函数

protected:
DECLARE_MESSAGE_MAP() // 必须包含此宏以启用Windows消息到成员函数的映射功能
};

这里使用了afx_msg关键字来标记这是一个由系统通过窗口消息触发调用的特殊成员函数,并且需要DECLARE_MESSAGE_MAP宏用于定义消息映射表结构的基础。

2. **消息映射声明**

接着要在该类的消息映射区声明实际要响应的具体消息以及对应的方法:

cpp

BEGIN_MSG_MAP(CTestDlg)
MESSAGE_HANDLER(WM_COMMAND, OnCommand)
END_MSG_MAP()

LRESULT CTestDlg::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if(uMsg == WM_COMMAND && LOWORD(wParam) == ID_BUTTON_CLICK)
return OnBn_CLICKED(HIWORD(wParam));

return FALSE;
}


在这个例子中,“WM_COMMAND”是 Windows 消息名称,当用户对控件执行操作如按下按钮时发送;"ON_BN_CLICKED"是一个预处理器符号,它关联了一个特定的消息标识符(ID Button_Click),并将其绑定到了我们之前声明的"OnBn_CLICKED()" 函数上。

**二、函数的实现**

对于已声明过的任何非静态成员函数,包括那些被映射为处理 windows 消息的函数,都需要在其相应的.cpp源代码文件里提供具体的功能实现:

cpp

// CTestDlg.cpp 文件内
void CTestDlg::OnBn_CLICKED(UINT /*wNotifyCode*/)
{
// 这里的参数可能不需要直接引用,取决于具体的编程需求

AfxMessageBox(_T("Button clicked!"));
// 实现:弹出提示框显示 "Button Clicked!" 当相应按钮被单击后。

// 其他业务逻辑...
}

// 注意: 对于某些 MFC 宏生成的函数原型,你还需要显式指定其返回类型 LRESULT:
LRESULT CTestDlg::OnInitDialog(CDataExchange* pDX)
{
...
return TRUE;
}

总结来说,在MFC环境中声明和实现函数的关键步骤主要包括两个方面:首先是在相关的类头文件中声明函数并与适当的消息或者命令相关联,然后在.CPP文件中给出这些函数的实际内容及行为描述。同时注意恰当利用AFX_*系列宏来进行有效的消息映射管理,这对于构建具有良好交互性的GUI程序尤其重要。