Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Обработчики событий в MFC  (Прочитано 7530 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
ChinChik
Гость
« : 01-08-2007 10:31 » new

Подскажите кто-нибудь плз.
Можно ли в MFC на контролы навешивать обработчики событий в процессе выполнения программы, а не статически как обычно (через BEGIN_MESSAGE_MAP и т.д)Не понял
Т.к. контрол создается вручную, то неизвестен его IDC_.
Есть выриант: отнаследовать класс от нужного контрола, переопределить функцию WindowProc() и в ней ловить WM_MESSAGES.
Но мне кажется что это кривовато, может есть другой вариант?Не понял? ПОМОГИТЕ!!!!

Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 01-08-2007 10:52 » 

можно, надо перегрузить в окне виртуальную функцию класса CWnd

(добавить в класс можно визардом)

Код:
virtual BOOL OnCommand(
   WPARAM wParam,
   LPARAM lParam
);

Цитата
Parameters

wParam
The low-order word of wParam identifies the command ID of the menu item, control, or accelerator. The high-order word of wParam specifies the notification message if the message is from a control. If the message is from an accelerator, the high-order word is 1. If the message is from a menu, the high-order word is 0.

lParam
Identifies the control that sends the message if the message is from a control. Otherwise, lParam is 0.

Return Value
An application returns nonzero if it processes this message; otherwise 0.

Remarks
OnCommand processes the message map for control notification and ON_COMMAND entries, and calls the appropriate member function.

Override this member function in your derived class to handle the WM_COMMAND message. An override will not process the message map unless the base class OnCommand is called.


Записан

ChinChik
Гость
« Ответ #2 : 01-08-2007 11:20 » 

Все разобрался!!!
Похоже что тот вариант о котром я сначала думал единственный.
Только если контрол является наследником не диалога, а например другого контрола, то ловить события нужно в переопределенной функции OnChildNotify( params... ).
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 01-08-2007 11:42 » 

ChikChik, сорри, я не про то подумал )  Ты мну сбил словом "обработчики событий". Ты же имел в виду сообщения виндовс, а не события ?
Если сообщения винды, то только рожать класс от контрола и в этом классе переопределять обработчики сообщений

А вот тут загадка Улыбаюсь
Цитата
Только если контрол является наследником не диалога, а например другого контрола

как это контрол может вообще являться наследником ? Или имеешь в виду родительское окно ?
Записан

ChinChik
Гость
« Ответ #4 : 01-08-2007 11:52 » 

Цитата
Только если контрол является наследником не диалога, а например другого контрола
Ну да ошибочка вышла Улыбаюсь
Имелось ввиду родительское окно.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines