управление оконными сообщениями в MFC: обязательно ли добавление вызова базового класса?

Рассмотрим этот фрагмент кода:

BEGIN_MESSAGE_MAP(CMyCheckBox, CButton)
  ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()

void CMyCheckBox::OnMouseMove(UINT nFlags, CPoint point)
{
    // here my code ....

   CButton::OnMouseMove(nFlags, point); // <-- Is this important ?
}

Вопросы:

1- Обязателен ли вызов базового класса?

 CButton::OnMouseMove(nFlags, point);  // <-- Is this mandatory?

2- Если я не добавлю его, что произойдет? (например, переполнение стека оконных сообщений)?
3- Является ли вызов базового класса формой message release? Если да, то есть ли другой способ правильно выпустить сообщение?


person Landstalker    schedule 05.06.2020    source источник


Ответы (1)


Оконные сообщения и связанные с ними данные управляются системой. Он генерирует сообщения и связанные с ними данные, передает их вашей программе и очищает их, когда обработчики сообщений возвращают управление обратно системе.

Это не связано с реализацией MFC с использованием иерархий классов C ++. Вызов базового класса является обязательным, если базовый класс должен наблюдать за сообщением. Ответить на это тривиально, если вы создали базовый класс. Если базовый класс предоставляется MFC, в документации указывается, является ли вызов реализации базового класса обязательным для правильного функционирования (например, CWnd :: OnCommand).

person IInspectable    schedule 05.06.2020