CDialog и события от элементов управления
От: konstBeast Россия  
Дата: 04.01.02 03:05
Оценка:
В диалоговом окне расположена кнопка или скажем ListBox. Как при наведениее мышки на любой из этих элементов отловить это самое событие. Или не наведение мыши, а например нажатие клавиши "а" в ListBox'е ?
Дело то в том, что CDialog не ловит события от своих детей (в данном случае элементов управления). Или я не прав?
Конечно можно создать свой класс порожденный от CListBox и в нем перехватывать OnMouseMove. Тут все нормально. Но мне надо именно в диалоге обрабатывать события.

Хотя бы намекните, пожалуйста. Спасибо.
Re: CDialog и события от элементов управления
От: retalik www.airbandits.com/
Дата: 04.01.02 05:22
Оценка: 2 (1)
Здравствуйте konstBeast, Вы писали:

B>В диалоговом окне расположена кнопка или скажем ListBox. Как при наведениее мышки на любой из этих элементов отловить это самое событие. Или не наведение мыши, а например нажатие клавиши "а" в ListBox'е ?

B>Дело то в том, что CDialog не ловит события от своих детей (в данном случае элементов управления). Или я не прав?
B>Конечно можно создать свой класс порожденный от CListBox и в нем перехватывать OnMouseMove. Тут все нормально. Но мне надо именно в диалоге обрабатывать события.

B>Хотя бы намекните, пожалуйста. Спасибо.


Есди нужен большой и красивый геморрой с обработкой сообщений, перекрой в твоем диалоге PreTranslateMessage и вручную все обрабатывай.

Но, с точки зрения MFC, правильнее именно делать специализированные контролы, которые можно будет использовать более чем один раз.
Успехов,
Виталий.
Re: CDialog и события от элементов управления
От: Игорь Вартанов Ниоткуда  
Дата: 04.01.02 06:40
Оценка: 3 (1)
Здравствуйте konstBeast, Вы писали:

B>Дело то в том, что CDialog не ловит события от своих детей (в данном случае элементов управления). Или я не прав?


Прав. В дополнение к тому, что сказал Виталий, могу добавить следующее: в CYourDialog::PreTranslateMessage проверяешь все WM_KEYxxx и WM_xBUTTONxxx/WM_MOUSExxx, и если они посланы чайлду твоего диалога (hwndDlg == GetParent(pMsg->hwnd)), то отсылаешь дубликат сообщения самому диалогу, не забывая о преобразовании координат в мышиных месседжах.
Все месседжи придут в диалоговую процедуру, где ты сможешь их централизованно обработать.

B>Хотя бы намекните, пожалуйста. Спасибо.


Надеюсь, что помог
---
С уважением,
Игорь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.