【发布时间】:2023-03-06 22:09:02
【问题描述】:
我看到 CEdit 的行为非常奇怪。在我从 CEdit 控件派生的类中,我需要捕获文本更改事件。我通过ON_CONTROL_REFLECT_EX 进行操作
class CSomeDerivedEdit : public CEdit
{
DECLARE_DYNAMIC(CSomeDerivedEdit )
public:
CSearchEditCtrl();
protected:
DECLARE_MESSAGE_MAP()
afx_msg BOOL OnEnChange();
...
};
在cpp中
IMPLEMENT_DYNAMIC(CSomeDerivedEdit , CEdit)
BEGIN_MESSAGE_MAP(CSomeDerivedEdit , CEdit)
ON_CONTROL_REFLECT_EX(EN_CHANGE, &CSomeDerivedEdit::OnEnChange)
END_MESSAGE_MAP()
我在某个列表控件中创建的这个控件作为子窗口,当我创建它并作为父窗口指针传递给列表控件时,一切正常,我得到 EN_CHANGE 事件但是当我作为列表控件事件的父窗口标题控件传递时没有'不反抗。
m_someEdit.Create( WS_CHILDWINDOW|WS_VISIBLE, rcRect, this, IDC_EDIT);这里一切正常
m_someEdit.Create( WS_CHILDWINDOW|WS_VISIBLE, rcRect, GetHeaderCtrl(), IDC_EDIT); 这里的控件创建也很好,我看到了,但是当我输入编辑控件时没有调用 on_control_reflect。
【问题讨论】:
-
所以我再次发现了一个非常奇怪的解决方案,我派生了自己的 CHeaderCtrl 类并将其子类化为列表控件,之后我开始进入它的子编辑控件 EN_CHANGE 事件。但是为什么它是这样工作的,我还是不明白:)