Обработка клавиш Tab и Alt + * в немодальных диалогах, размещенных в модальном диалоге

У нас есть набор немодальных диалогов, которые являются дочерними по отношению к модальному диалогу. Только один из немодальных диалогов отображается одновременно; остальные скрыты. Это контролируется элементами модального диалога. Если вы думаете о листе свойств Windows, вы поймете эту идею.

Все работает нормально, за исключением клавиши Tab и горячих клавиш Alt + char. Они не делают то, что должны, то есть перемещаются по элементам управления в активном немодальном диалоговом окне. Они просто пищат.

В обычном сценарии, то есть в немодальном диалоге, принадлежащем окну приложения, это обрабатывается путем вызова IsDialogMessage () в цикле сообщений приложения. Мы не можем этого сделать, потому что это не наш цикл сообщений - Windows запускает цикл сообщений для обслуживания модального диалога, и все, что мы получаем, - это сообщения, отправленные в процесс диалога.

Мы пытаемся придумать способы справиться с этим, не прибегая к самостоятельной навигации через WM_GETDLGCODE.

Любые идеи? Прямой C ++ Win32 API, ничего из тех новомодных вещей, которыми все дети пользуются в наши дни.

TIA

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Дальнейшее исследование показывает, что Windows применяет клавиши навигации к модальному диалоговому окну хоста, а не к немодальным диалоговым окнам дочерних элементов. Они нужны нам для перехода в немодальные диалоги.


person chrisd    schedule 14.02.2015    source источник


Ответы (1)


Ответ, найденный коллегой, заключается в добавлении стиля DS_CONTROL в немодальные диалоги.

Рэймонд Чен обсуждает DS_CONTROL здесь.

Удивительно, что вы можете работать с Windows каждый день в течение 20 лет и при этом сталкиваться с вещами, о которых вы никогда не слышали.

person chrisd    schedule 17.02.2015