Диалоговое окно, как и меню, может быть создано несколькими способами: во-первых, с помощью описания его в файле ресурсов и, во-вторых, во время выполнения программы. Наиболее часто используется описание диалога в файле ресурсов. Лучше всего при создании диалого воспользоваться редактором ресурсов, с помощью которого может быть создан текстовый файл, содержащий описание диалогового окна. Ресурсы диалога в этом текстовом файле задаются оператором DIALOG, который имеет следующий формат:
DialogName DIALOG [DISCARDABLE] X,Y,Width,Height CAPTION "Заголовок окна" STYLE <Стили диалогового окна> FONT n, <имя шрифта> { Описание элементов диалога }В данном случае DialogName - это имя диалогового окна. Опция DISCARDABLE станет совершенно ясной при рассмотрении вопроса об организации памяти в Windows. Параметры X и Y - это координаты верхнего левого угла диалового окна, Width и Height - ширина и высота диалога. STYLE описывает стили окна. Здесь могут использоваться как стили, применяемые для описания обычных окон, так и стили, применяемые только в диалоговых окнах. Эти новые стили приведены в таблице:
Стиль | Значение | Эффект |
DS_ABSALIGN | 0x0001L | Положение диалогового окна исчисляется в экранных координатах |
DS_SYSMODAL | 0x0002L | Создается системное модальное диалоговое окно |
DS_3DLOOK | 0x0004L | Создается диалоговое окно, имеющее зрительную иллюзию трехмерности |
DS_FIXEDSYS | 0x0008L | Вместо SYSTEM_FONT используется SYSTEM_FIXED_FONT |
DS_NOFAILCREATE | 0x0010L | Диалоговое окно создается, несмотря на то, что при его создании произошли ошибки |
DS_LOCALEDIT | 0x0020L | В 32-битных приложениях не используется |
DS_SETFONT | 0x0040L | Определяет шрифт, который будет применятся в диалоговом окне |
DS_MODALFRAME | 0x0080L | Создается модальное диалоговое окно |
DS_NOIDLEMSG | 0x0100L | |
DS_SETFOREGROUND | 0x0200L | Поместить диалоговое окно на передний план |
DS_CONTROL | 0x0400L | |
DS_CENTER | 0x0800L | Диалоговое окно помещается в центр рабочей области |
DS_CENTERMOUSE | 0x1000L | |
DS_CONTEXTHELP | 0x2000L | |
Приведенных выше сведений вполне достаточно, чтобы написать заготовку диалогового окна в файле ресурсов. Но какой смысл описывать диалоговое окно, если в нем нет ни одного из элементов управления? Ведь даже закрыть такое диалоговое окно (если в нем, конечно, нет системного меню) невозможно! Значит, нам необходимо срочно научиться описывать эти элементы!
Я уже упоминал о том, что в "недрах" Win32 есть масса предопределенных объектов. В частности, там находятся и некоторые предопределенные классы окон. К таким классам относятся кнопки (класс "button"), списки (класс "listbox"), комбинированные списки (класс "combobox"), окна редактирования (класс "edit"), полосы прокрутки (класс "scrollbar"), статистические элементы (класс "static"). У каждого класса есть свой определенный набор стилей, которые определяют внешний вид и поведение элементов управления, относящихся к данному классу.
Управление окном каждого класса, а также получение информации от него производится с помощью обмена управляющими сообщениями. О действиях пользователей с ними элементы управления оповещают свои родительские окна через нотификационные сообщения.