Как я могу обрабатывать управляющие сообщения в родительском CDialog?

У меня есть некоторый контроль, например CtrlTree на CMyDialog. Я хочу обрабатывать сообщения типа ON_WM_LBUTTONDOWN() от CTreeCtrl в классе CMyDialog.

Есть ли способ в MFC перенаправить поток сообщений на родительский?


person diego2la    schedule 17.04.2012    source источник
comment
Почему ты хочешь это сделать? Вся суть архитектуры MFC заключается в том, что она отражает сообщения от родителя к элементу управления, который в первую очередь сгенерировал изображение, что способствует инкапсуляции, повторному использованию кода и разделению ответственности.   -  person Cody Gray    schedule 17.04.2012
comment
Мой работодатель дает мне эту задачу. Хотите перенаправить поток сообщений, потому что обработчики на CDialog уже написаны. Я понимаю, что это решение не соответствует инкапсуляции. Но если я перенаправлю поток сообщений, проект будет почти готов. Есть ли у вас какие-нибудь идеи по этой теме?   -  person diego2la    schedule 17.04.2012
comment
stackoverflow .com / questions / 1506145 /.   -  person Flot2011    schedule 17.04.2012


Ответы (1)


Самый простой способ перенаправить ваши сообщения - просто отправить настраиваемое сообщение (WM_USER + xxx) из обработчика ON_WM_LBUTTONDOWN вашего элемента управления в родительский класс.

Поместите родительский код обработчика WM_LBUTTONDOWN в отдельный метод и вызовите этот метод напрямую.

Что-то вроде этого (псевдокод), предполагая, что ваш существующий код находится в HandleTreeCtrlLBDown ()

CMyTreeCtrl::OnLButtonDown(..)
{
   pParent ->SendMessage(WM_TREECTRLLBDOWN, 0, (LPARAM)this);
}

CControlParentDialog::OnTreeCtrlLBDown(wParam, lParam)
{
   HandleTreeCtrlLBDown();
} 
person Flot2011    schedule 17.04.2012