gpt4 book ai didi

c++ - MFC: 在派生的 CEdit 中没有收到 EN_CHANGE 消息

转载 作者:行者123 更新时间:2023-11-27 22:54:17 26 4
gpt4 key购买 nike

我看到 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 没有调用。

最佳答案

ON_CONTROL_REFLECT_EX 只能工作,如果 WM_COMMAND 消息的接收者也在 MFC 中被子类化。如果它是一个纯 Windows 控件且未使用 MFC 进行子类化,则 WM_COMMAND 消息永远不会反射(reflect)给任何子项。

记住:反射有效,因为 MFC 首先处理来自父控件中的子控件的 WM_COMMAND 消息,并将其提供回子控件。如果未处理,WM_COMMAND 消息将在父级内部处理。标准窗口控件不知道反射,总是自己处理 WM_COMMAND 消息....

因此,如果标题控件未被 MFC 子类化,则反射将不起作用。

关于c++ - MFC: 在派生的 CEdit 中没有收到 EN_CHANGE 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34634103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com