Я вижу очень странное поведение CEdit. В моем производном классе из элемента управления CEdit мне нужно поймать событие изменения текста. Я делаю это с помощью ON_CONTROL_REFLECT_EX
MFC: не получил сообщение EN_CHANGE в производном CEdit
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. Но почему это так, я до сих пор не понимаю :) –