проблема с modeless диалогом
От: ilya123 Россия  
Дата: 09.09.02 10:15
Оценка:
У меня есть главное окно программы. Я создаю modeless диалог (от CDialogImpl). В нем 3 кнопки.
Проблема в том, что нельзя переключать фокус с помощью клавиатуры между этими кнопками. Т.е. стрелки влево и вправо не работают; если нажать Tab, вызывается обработчик акселератора из главного окна.
Я пробовал задавать в качестве родительского окна хэндл главного или нуль — результат один и тот же.
На мышь диалог реагирует нормально.
Если создать его модальным, тоже все нормально.
Как пофиксить?
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).
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re[2]: проблема с modeless диалогом
От: Epelan  
Дата: 19.11.02 14:22
Оценка:
Здравствуйте, Alexander Shargin

В моем случае главное окно программы — модальный диалог, и из него вызывается немодальный диалог, в котором и возникает рассматриваемая проблема. Чтобы применить предложенный вами способ, нужно где-то взять MessageLoop, или, может, надо применять какой-то иной способ? Подскажите, пожалуйста
Re[3]: проблема с modeless диалогом
От: Алекс Россия http://wise-orm.com
Дата: 20.11.02 04:55
Оценка:
Здравствуйте, Epelan, Вы писали:

E>Здравствуйте, Alexander Shargin


E>В моем случае главное окно программы — модальный диалог, и из него вызывается немодальный диалог, в котором и возникает рассматриваемая проблема. Чтобы применить предложенный вами способ, нужно где-то взять MessageLoop, или, может, надо применять какой-то иной способ? Подскажите, пожалуйста


Это не возможно. Мы не имеем доступ к message loop, органицуемому в DialogBoxParam.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.