Re: проблема с modeless диалогом
От: Alexander Shargin Россия RSDN.ru
Дата: 09.09.02 10:27
Оценка: 13 (2)
Здравствуйте ilya123, Вы писали:

I>У меня есть главное окно программы. Я создаю modeless диалог (от CDialogImpl). В нем 3 кнопки.

I>Проблема в том, что нельзя переключать фокус с помощью клавиатуры между этими кнопками. Т.е. стрелки влево и вправо не работают; если нажать Tab, вызывается обработчик акселератора из главного окна.
I>Я пробовал задавать в качестве родительского окна хэндл главного или нуль — результат один и тот же.
I>На мышь диалог реагирует нормально.
I>Если создать его модальным, тоже все нормально.
I>Как пофиксить?

Клавиатурную навигацию в диалоге реализует функция IsDialogMessage, которую надо вызывать в цикле сообщений. Для модального диалога это делается само внутри функции DialogBox (а CDialogImpl::DoModal испольщует именно её). А для немодального ты должен сделать это сам.

Проще всего сделать твой диалог фильтром сообщений (пронаследоваться от CMessageFilter), реализовать метод PreTranslateMessage, вызвать в нём IsDialogMessage и зарегистрировать твой фильтр в цикле сообщений (CMessageLoop::AddMessageFilter).
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.