Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Обработка собщений контролов


Автор: vinter 24.6.2008, 15:54
Здравствуйте,

У меня есть класс в конструкторе которого передается указатель на окно, в этом классе создаются все необходимые контролы. Вопрос: как мне обработать события от контролов созданных, не в классе окна?
т.е как мне можно загнать инфу о моих контролах в message_map?

Автор: Earnest 25.6.2008, 08:13
Если я правильно поняла.
Переопредели функцию OnCmdMsg родительского окна; вызови сначала OnCmdMsg твоего объекта - он, естественно, должен быть доступен в окне. Тогда все сообщения WM_COMMAND, WM_NOTIFY и апдейты можно будет поместить в message-map твоего класса - он должен быть наследником как минимум CmdTarget.

Автор: vinter 25.6.2008, 09:49
Earnest, он не является наследником ни одного из виндовых классов, это просто класс в котором инкопсулируется создание контролов. Причем мне надо обработать сообщения от контролов в этом классе, а все остальны сообщения окна(меню например) в основном. Можно ли допустим написать метод этого класса, а потом его вызвать в карте сообщений окна родителя? 

Автор: Earnest 26.6.2008, 09:40
Так сделай его наследником, если хочешь обрабатывать в нем сообщения!
Как минимум CCmdTarget.
Или забудь про карты сообщений и пиши всю эту лабуду сам, руками...

Цитата(vinter @  25.6.2008,  10:49 Найти цитируемый пост)
Можно ли допустим написать метод этого класса, а потом его вызвать в карте сообщений окна родителя?  

НЕТ. Можно написать в окне обработчик, из которого вызвать метод твоего класса. И так 20 раз - сколько там у тебя контролов * на различные уведомления от них?
А сделав класс CCmdTarget, ты спокойно в его карте обрабатываешь все, что тебе нужно (но только уведомления!), а окно обрабатывает все остальное.

Автор: vinter 26.6.2008, 10:30
Earnest, спасибо за обьяснение

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)