| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > PreTranslateMessage не вызывается |
| Автор: Egoryan 25.2.2008, 02:30 |
| Всем Доброго времени суток. Создаю я диалог с помощью CreateIndirect. На нем TabCtrl(в каждом из них тоже по CDialog). Возникла такая проблема. Не вызывается PreTranslateMessage в диалогах(чтобы с помощью таба можно было перемещаться по контролам). Помогите пожалуйста! Заранее спасибо! |
| Автор: Earnest 26.2.2008, 12:32 |
| Почему ты решил, что не вызывается? |
| Автор: Egoryan 27.2.2008, 01:36 | ||
Ну потому что BOOL CABCDialog::PreTranslateMessage(MSG* msg) { AfxMessageBox("123"); CDialog::PreTranslateMessage(msg); } messagebox ни разу не вызвался. |
| Автор: Earnest 27.2.2008, 09:08 |
| Если у тебя правильно построенное MFC-приложение, и диалог ты запускаешь через MFC-средства, то PreTranslate вызываться должна - она вызывается из главного цикла обработки сообщений или из цикла DoModal. Так что вижу 2 возможных причины: 1) Что-то не так с переопределением виртуальной функции. Чтобы проверить - поставь точку прерывания в CDialog::PreTranslateMessage. Если туда попадешь, а к себе нет - проверь определение PreTranslate у себя, наследование, перекомпилируй проект, ... бывает всякое. Если не попадаешь, то см. далее: 2) Проверь, как выполняется главный цикл.... Еще мысль: если ты имеешь в виду те диалоги, которые детями сидят в tab-контроле, то PreTranslate такому диалогу может прийти только, если его собственный чайлд находится в фокусе. Посмотри, как устроены вызовы PreTranslate (в CWinThread), и тебе многое станет понятно. |
| Автор: Egoryan 28.2.2008, 14:27 |
| Все бы хорошо,но я окно упаковываю в DLL Обычную. |
| Автор: Earnest 28.2.2008, 19:04 |
| Если у тебя Extension DLL + MFC приложение, то все равно должно работать. А если нет (хотя бы одно условие), но PreTranslate вызываться не будет: это свойство MFC-Оболочки, и без фреймворка оно не работает. |