Ресурсы. Файл описания ресурса, страница 6

Диалоговыеокна

Диалоговые окна во многом напоминают всплывающие окна. И те, и другие принимают ввод от пользователя для выполнения какой-то конкретной задачи, например имя файла для загрузки или символьную строку для проведения поиска. Основное различие между диалоговыми и всплывающими окнами состоит в том, что для диалоговых окон используются шаблоны, которые определяют элементы управления, создаваемые в диалоговом окне. Эти шаблоны могут быть определены в файле описания ресурса с использованием ресурса типа DIALOGEX. Они могут быть также динамически созданы в памяти при выполнении приложения.

Существуют также функциональные различия в поведении всплывающего окна и диалогового окна. В функциях диалогового окна по умолчанию применяется специальная функция обработки сообщений. Эта функция интерпретирует нажатие клавиш, таких как клавиши со стрелками, Tab и Shift+Tab, для обеспечения выбора элементов управления в диалоговом окне с помощью клавиатуры. Любые действия, которые могут быть выполнены в диалоговом окне, могут быть также выполнены в дочернем или всплывающем окне. Диалоговые окна более удобны для создания простых всплывающих окон, в которых применяются обычные элементы управления, такие как кнопки и списки. Всплывающие и дочерние окна удобнее, если в окне широко применяется вывод информации или стандартное поведение окна должно быть модифицировано.

Типыдиалоговыхокон

Наиболее распространенным типом диалоговых окон является модальное диалоговое окно. Если модальное диалоговое окно находится на экране, пользователь не может переключиться на другую часть приложения. По умолчанию оно ограничивает доступ к другим видимым окнам приложения, в котором вызвано это диалоговое окно. Тем не менее, пользователь может переключиться на другие приложения в то время, как отображается модальное диалоговое окно.

Диалоговое окно становится системо-модальным, если в шаблоне диалогового окна указан стиль WS_SYSMODAL. Системно-модальное диалоговое окно можно также создать, вызвав функцию SetSysModalWindow. Системно-модальные диалоговые окна занимают весь экран и могут применяться, только если возникает серьезная проблема, например ошибка системы, которую пользователь не может игнорировать. В Windows 2000 и Windows 98 системно-модальные диалоговые окна всегда располагаются поверх остальных окон, но, в отличие от предыдущих версий Windows, пользователь может переключаться на другие приложения. Однако системно-модальное диалоговое окно закрывает окна других приложений и мешает работать.

Для создания модальных диалоговых окон и системно-модальных диалоговых окон может применяться функция DialogBox. Функция DialogBox позволяет направлять сообщения всех окон в функцию диалогового окна, пока это диалоговое окно находится на экране.

Менее распространенными, но иногда удобными являются немодальные диалоговые окна, которые по сути являются всплывающими окнами. Немодальные диалоговые окна могут получать и терять фокус ввода. Они часто используются для создания небольших окон, называемых панелями инструментов, которые содержат списки инструментальных средств. Для создания немодальных диалоговых окон применяется функция CreateDialog. Существует несколько разновидностей функции CreateDialog, но все они выполняют одну и ту же задачу: отображают и инициализируют немодальное диалоговое окно. Поскольку немодальное диалоговое окно остается на экране, оно должно обрабатывать сообщения совместно с другими окнами с помощью цикла обработки сообщений. Для этого необходимо внести изменения в цикл обработки сообщений, если немодальное диалоговое окно должно отвечать на выбор элементов управления, выполняемый с помощью клавиш Tab и клавиш со стрелками. Ниже приведен типичный цикл обработки сообщений, содержащий немодальное диалоговое окно:

while ( GetMessage( Smsg, NULL, 0, 0 ) ) {

if ( hDlgModeless || ! IsDialogMessage ( hDlgModeless, Smsg ) ) {

TranslateMessage ( Smsg ) ; DispatchMessage ( Smsg ) ;