Московский инженерно-физический институт
Вид материала | Практикум |
- Ю. С. Барсуков 1, А. Ю. Окунев 2 1 Московский инженерно-физический институт (государственный, 29.25kb.
- В. А. Курнаев Московский инженерно-физический институт (государственный университет),, 27.18kb.
- «Вегето-сосудистая дистония», 192.12kb.
- Перечен ь научных разделов и базовых вузов по научным разделам открытого конкурса, 247.02kb.
- Д. В. Гуцко Московский инженерно-физический институт (государственный университет), 34.47kb.
- В. А. Тумольский московский инженерно-физический институт (государственный университет), 27.44kb.
- К. С. Чистов Московский инженерно-физический институт (государственный университет), 24.11kb.
- Вдокладе рассматривается задача оценки рисков инвестиционных проектов электростанций, 29.4kb.
- Резюме Луценко Владимир Юрьевич, 22.32kb.
- Л. Ю. Грецкая московский инженерно-физический институт (государственный университет), 26.28kb.
Описание диалога в файле ресурсов
Диалоговые окна, или просто диалоги, – это специальный вид окон, позволяющих вести диалог с программой, т. е. вводить в программу и получать из нее разнообразную информацию. Обмен информацией с программой и задание режимов ее работы осуществляется с помощью элементов (органов) управления – кнопок разного вида и с разными свойствами, списков, окон редактирования, линеек прокрутки и др. В принципе все эти элементы, так же как и сама диалоговая панель, являются окнами и их можно создать в программе с помощью соответствующих функций Windows. Однако при объявлении некоторого окна диалоговым, мы передаем Windows часть работы по созданию и поддержке этого окна, упрощая тем самым программу.
Диалоги бывают двух видов: модальные и немодальные (довольно странная терминология, ни в русском, ни в английском языках не имеющая ничего общего со специфическими свойствами этих окон). Модальный диалог характерен тем, что после открытия диалогового окна пользователь может работать только с его элементами управления, а все остальные окна приложения блокируются до тех пор, пока модальный диалог не будет закрыт. Модальные диалоги естественно использовать в тех случаях, когда без информации, вводимой через окно диалога, программа не может дальше работать. Если, например, программа на некотором этапе должна ввести данные из того или иного файла, то выбор конкретного файла естественно выполнить с помощью модального диалогового окна. Кстати, отсюда следует, что нормальное состояние модального диалога – закрытое, так как в открытом состоянии диалог не дает приложению работать.
Немодальный диалог не препятствует пользователю работать с любыми элементами главного окна приложения или его внутренних окон. С помощью немодальных диалогов удобно, например, задавать масштаб, цвет или какие-то другие характеристики выводимых на экран диаграмм и графиков. Нормальное состояние немодального диалога – открытое, в том смысле, что он всегда может быть открыт, так как ничем не мешает программе.
В примере 4-1 модальное диалоговое окно используется для вывода информации о разработчике программы.
Так же, как и меню, модальный диалог описывается в файле ресурсов с помощью соответствующих ключевых слов. Начинается это описание с ключевого слова DIALOG, предваряемого произвольным именем этого диалога. Естественно, в файле ресурсов можно описать любое количество диалоговых окон с различающимися именами. В качестве параметров этого предложения языка ресурсов выступают четыре целых числа – координаты начала (т. е. верхнего левого угла) диалогового окна и его размеры по горизонтали и вертикали. Эти величины задаются не в пикселах, а в диалоговых единицах, значение которых в пикселах можно получить с помощью функции GetDialogBaseUnits(). Обычно каждая диалоговая единица (и по горизонтальной, и по вертикальной оси) равна 2 пикселам.
Следующее предложение сценария диалога определяет его стиль, для чего служит ключевое слово STYLE. Стиль диалога, как и вообще любого окна, задается с помощью символических констант, описывающих отдельные характеристики диалогового окна и объединяемых в одно слово с помощью побитовой операции ИЛИ (знак | ). Для модального диалога обычно используется специфический стиль DSMODALFRAME, определяющий наличие вокруг диалогового окна толстой рамки, позволяющей перемещать окно по экрану, но не изменять его размеры, а также общие для всех окон стили WSCAPTION для создания заголовка и WSSYSMENU для включения в состав окна системного меню (последнее в диалоговых окнах вырождается в кнопку

Далее в операторных скобках {...} определяется перечень элементов управления, включаемых в диалоговое окно. Этот перечень задается с помощью зарезервированных ключевых слов и позволяет разместить в диалоговом окне любые предусмотренные системой элементы – кнопки, списки, надписи и пр. В рассматриваемой программе используются лишь два элемента управления – статический элемент управления, т. е. попросту область с текстом, и нажимаемая кнопка.
Элементы управления описываются в файле ресурсов с помощью ключевого слова CONTROL, имеющего следующий формат:
CONTROL "текст", идентификатор, "класс", стиль, координаты
Параметр "текст" определяет тот текст, который будет выведен вместе с данным элементом управления. Для кнопок – это надпись на кнопке или рядом с ней; для области с текстом – строки, выводимые в указанную область, для групповой рамки – ее заголовок. Некоторые элементы управления не могут иметь текстового сопровождения и для них этот параметр игнорируется.
Идентификатор элемента управления, как и идентификаторы команд меню, представляет собой произвольное число, обычно указываемое в виде символической константы; он позволяет программе определить, от какого элемента управления пришло сообщение или, наоборот, какому элементу сообщение отправлено. В нашей программе в качестве идентификатора кнопки используется константа IDOK, которой в файле 4-1.H присвоено значение 100. Область с фиксированным текстом ("Автор программы...") не может посылать сообщений, и ее идентификатор не играет роли. Обычно таким идентификаторам дается значение -1.
В качестве третьего параметра предложения CONTROL указывается (в кавычках) класс элемента управления. В Windows имеется целый ряд предопределенных классов специфических окон, используемых в качестве элементов управления как в диалогах, так и в обычных окнах. Названия этих классов и указываются в предложениях CONTROL в файле ресурсов. Так, класс STATIC позволяет, в частности, создавать области с текстом; класс LISTBOX – списки; класс EDIT – окна редактирования, класс BUTTON – разнообразные кнопки. В Windows имеются и другие предопределенные классы.
В рамках указанного класса можно создавать элементы управления, различающиеся (иногда очень сильно) по внешнему виду и характеристикам. Конкретный вид элемента управления определяется его стилем. Так, для класса STATIC стиль SSCENTER задает область с текстом, выровненным по центру; стиль SSLEFT выравнивает указанный текст по левому краю; стиль SSICON (того же класса STATIC) не имеет отношения к текстам, а служит для получения изображения пиктограммы; стиль SSBITMAP позволяет вывести в диалоговое окно растровое изображение. Для класса LISTBOX стиль LBSSORT упорядочивает помещаемые в список текстовые строки; стиль WSVSCROLL снабжает список вертикальной полосой прокрутки; стиль LBSNOTIFY позволяет управлять списком посредством щелчков мыши. В рамках класса BUTTON можно создавать разнообразные кнопки – нажимаемые (стиль BSPUSHBUTTON), селективные (стиль AUTORADIOBUTON), кнопки-флажки (стиль BSAUTOCHECKBOX) и др.
Следует заметить, что ключевые слова CONTROL, "STATIC", "BUTTON" и др. могут писаться как прописными, так и строчными буквами, однако стили элементов управления (SSCENTER и BSPUSHBUTTON в нашем примере), являясь предопределенными константами, могут указываться только прописными буквами (как и все прочие предопределенные константы, например, HWNDDESKTOP или IDCARROW).
Последний блок параметров предложения CONTROL представляет собой четыре числа, задающие координаты данного элемента в окне диалога, а также его размеры (в диалоговых единицах).
Общая процедура заполнения диалогового окна элементами управления заключается в том, что в файле ресурсов описываются виды элементов управления и их местоположение в диалоге, а затем программным образом организуется взаимодействие их с программой путем посылки и приема сообщений. С помощью сообщений, посылаемых элементам управления диалога, можно, например, нажать или отпустить кнопку, выделить цветом строку списка, пометить или снять отметку с кнопки-флажка; с помощью же сообщений, принимаемых от элемента управления, можно определить, какая кнопка нажата или какая строка списка выбрана пользователем.
Стоит отметить, что для большинства элементов управления допускаются два формата описания, равнозначные по конечному результату. Помимо формата с обобщенным ключевым словом CONTROL, описанного выше, в котором вид элемента управления задается его классом и стилем, имеется возможность определять элементы управления с помощью набора ключевых слов, сразу описывающих и класс, и стиль. В этом случае нажимаемая кнопка описывается ключевым словом PUSHBUTTON, центрированный текст – ключевым словом CTEXT и т. д.
Так, для нажимаемой кнопки, включенной в файл 4-1.RC, возможны следующие равнозначные описания:
CONTROL "Закрыть",ID_OK,"BUTTON",BS_PUSHBUTTON,27,32,43,12
PUSHBUTTON "Закрыть",ID_OK, 27, 32, 43, 12
Ниже для справки приводится пример файла ресурсов с описаниями (в первом формате) наиболее употребительных элементов управления с указанием типичных для них стилей:
Controls DIALOG 31, 6, 241, 116
CAPTION "Набор элементов управления в диалоговом окне" {
CONTROL "Нажимаемая кнопка", ID_BTN, "button",
BS_PUSHBUTTON | BS_CENTER, 8, 20, 104, 16
CONTROL "Кнопка-флажок", ID_CHECK, "button",
BS_AUTOCHECKBOX, 8, 60, 64, 12
CONTROL "Статический элемент (текст)", ID_TEXT, "static",
SS_LEFT, 8, 4, 104, 12
CONTROL "Окно редактирования", ID_EDIT, "edit",
ES_LEFT | WS_BORDER, 8, 40, 104, 16
CONTROL "",ID_LIST,"listbox",LBS_STANDARD,8,76,68,36
CONTROL "",ID_COMBO,"combobox",CBS_SORT,122,56,108,56
CONTROL "Групповая рамка", -1, "button", BS_GROUPBOX,
122, 4, 108, 40
CONTROL "Селективная кнопка 1", ID_RADIO1, "button",
BS_AUTORADIOBUTTON, 125, 16, 84, 12
CONTROL "Селективная кнопка 2", ID_RADIO2, "button",
BS_AUTORADIOBUTTON, 125, 28, 84, 12
}
Внешний вид диалогового окна, соответствующего такому файлу ресурсов, изображен на рис. 4.2.
В приведенном варианте файла ресурсов для некоторых элементов управления указаны поясняющие надписи ("Статический элемент (текст)", "Окно редактирования", "Групповая рамка" и др.). У списка и комбинированного списка таких надписей-заголовков не предусмотрено, поэтому в файле ресурсов при их описании на соответствующих местах указаны пустые символьные строки (""). Содержимое же окон списка и комбинированного списка было помещено в эти элементы управления программно, при обработке сообщения WMINITDIALOG посредством вызовов (в цикле) функции SendDlgItemMessage(). Процедуры динамического изменения содержимого списков и других элементов управления будут рассмотрены в последующих подразделах.

Рис. 4.2. Диалоговое окно с набором элементов управления
В табл. 4.1 – 4.4 приведены наиболее употребительные классы и стили различных элементов управления.
Табл. 4.1. Некоторые стили элемента управления STATIC
Стиль | Описание |
SS_LEFT, SS_RIGHT, SS_CENTER | Позиционирование текста в прямоугольнике с указанными координатами, соответственно, влево, вправо или по центру |
SS_WHITEFRAME | Пустая белая рамка |
SS_BLACKFRAME | Пустая черная рамка |
SS_ICON | Вывод пиктограммы, описанной в файле ресурсов |
SS_BITMAP | Вывод рисунка, описанного в файле ресурсов |
Табл. 4.2. Некоторые стили элемента управления BUTTON
Стиль | Описание |
BS_PUSHBUTTON | Нажимаемая кнопка |
BS_CENTER | Позиционирование текста на кнопке по центру |
BS_AUTOCHECKBOX | Кнопка-флажок |
BS_GROUPBOX | Групповая рамка |
BS_AUTORADIOBUTTON | Селективная кнопка |
Табл. 4.3. Некоторые стили элемента управления LISTBOX
Стиль | Описание |
LBS_NOTIFY | Щелчок мышью по строке списка посылает в родительское окно сообщение WM_COMMAND |
LBS_SORT | Строки списка автоматически упорядочиваются по алфавиту |
WS_VSCROLL | Наличие полосы вертикальной прокрутки |
WS_BORDER | Наличие рамки вокруг списка |
LBS_STANDARD | Комбинация стилей LBS_NOTIFY, LBS_SORT, WS_VSCROLL и WS_BORDER |
Табл. 4.4. Некоторые стили элемента управления COMBOBOX
Стиль | Описание |
CBS_SORT | Строки списка автоматически упорядочиваются по алфавиту |
CBS_DROPDOWN | Выпадающий комбинированный список |