使用Create方法创建出来的CEdit控件 如何处理消息 MFC 覆盖原生的ON_EN_CHANGE 消息处理过程
时间: 2024-09-15 16:04:22 浏览: 74
在MFC(Microsoft Foundation Classes)中,`CEdit` 是一个用于创建编辑框控件的类。当使用 `Create` 方法创建 `CEdit` 控件后,可以通过消息映射来处理各种消息,包括编辑框的 `EN_CHANGE` 消息,它在编辑内容改变后发送。
如果你想覆盖原生的 `ON_EN_CHANGE` 消息处理过程,可以在你的 `CEdit` 派生类中添加一个消息映射宏,然后定义一个新的处理函数。以下是实现这一过程的步骤:
1. 在你的 `CEdit` 派生类的头文件中添加一个消息映射宏和一个新的处理函数声明:
```cpp
// YourDerivedEdit.h
class CYourDerivedEdit : public CEdit
{
// ... 其他成员和函数 ...
// 消息映射宏
afx_msg void OnChange(); // 声明处理函数
// 消息映射宏
DECLARE_MESSAGE_MAP()
};
```
2. 在你的类的实现文件中添加消息映射条目和处理函数的定义:
```cpp
// YourDerivedEdit.cpp
BEGIN_MESSAGE_MAP(CYourDerivedEdit, CEdit)
// ... 其他消息映射条目 ...
ON_EN_CHANGE(IDC_YOUR_EDIT, &CYourDerivedEdit::OnChange) // 消息映射条目
END_MESSAGE_MAP()
void CYourDerivedEdit::OnChange()
{
// 在这里编写你自己的消息处理代码
// 原始的处理代码将不会被执行,除非你在新的处理函数中调用基类版本
// 调用基类的处理函数,如果需要保留默认行为
// CEdit::OnChange();
// ... 其他自定义代码 ...
}
```
3. 确保你的 `CEdit` 派生类对象被正确创建,并且控件ID与消息映射中的ID相匹配。
现在,每当 `EN_CHANGE` 消息被触发时,MFC 会调用你定义的 `OnChange` 函数,而不是默认的 `CEdit` 消息处理函数。
阅读全文