Московский инженерно-физический институт

Вид материалаПрактикум

Содержание


Описание диалога в файле ресурсов
CONTROL, имеющего следующий формат: CONTROL "текст", идентификатор, "класс", стиль, координаты
CONTROL "Закрыть",ID_OK,"BUTTON",BS_PUSHBUTTON,27,32,43,12
Controls DIALOG 31, 6, 241, 116
Табл. 4.2. Некоторые стили элемента управления BUTTON
Табл. 4.3. Некоторые стили элемента управления LISTBOX
Табл. 4.4. Некоторые стили элемента управления COMBOBOX
Подобный материал:
1   ...   11   12   13   14   15   16   17   18   ...   24

Описание диалога в файле ресурсов


Диалоговые окна, или просто диалоги, – это специальный вид окон, позволяющих вести диалог с программой, т. е. вводить в программу и получать из нее разнообразную информацию. Обмен информацией с программой и задание режимов ее работы осуществляется с помощью элементов (органов) управления – кнопок разного вида и с разными свойствами, списков, окон редактирования, линеек прокрутки и др. В принципе все эти элементы, так же как и сама диалоговая панель, являются окнами и их можно создать в программе с помощью соответствующих функций Windows. Однако при объявлении некоторого окна диалоговым, мы передаем Windows часть работы по созданию и поддержке этого окна, упрощая тем самым программу.

Диалоги бывают двух видов: модальные и немодальные (довольно странная терминология, ни в русском, ни в английском языках не имеющая ничего общего со специфическими свойствами этих окон). Модальный диалог характерен тем, что после открытия диалогового окна пользователь может работать только с его элементами управления, а все остальные окна приложения блокируются до тех пор, пока модальный диалог не будет закрыт. Модальные диалоги естественно использовать в тех случаях, когда без информации, вводимой через окно диалога, программа не может дальше работать. Если, например, программа на некотором этапе должна ввести данные из того или иного файла, то выбор конкретного файла естественно выполнить с помощью модального диалогового окна. Кстати, отсюда следует, что нормальное состояние модального диалога – закрытое, так как в открытом состоянии диалог не дает приложению работать.

Немодальный диалог не препятствует пользователю работать с любыми элементами главного окна приложения или его внутренних окон. С помощью немодальных диалогов удобно, например, задавать масштаб, цвет или какие-то другие характеристики выводимых на экран диаграмм и графиков. Нормальное состояние немодального диалога – открытое, в том смысле, что он всегда может быть открыт, так как ничем не мешает программе.

В примере 4-1 модальное диалоговое окно используется для вывода информации о разработчике программы.

Так же, как и меню, модальный диалог описывается в файле ресурсов с помощью соответствующих ключевых слов. Начинается это описание с ключевого слова DIALOG, предваряемого произвольным именем этого диалога. Естественно, в файле ресурсов можно описать любое количество диалоговых окон с различающимися именами. В качестве параметров этого предложения языка ресурсов выступают четыре целых числа – координаты начала (т. е. верхнего левого угла) диалогового окна и его размеры по горизонтали и вертикали. Эти величины задаются не в пикселах, а в диалоговых единицах, значение которых в пикселах можно получить с помощью функции GetDialogBaseUnits(). Обычно каждая диалоговая единица (и по горизонтальной, и по вертикальной оси) равна 2 пикселам.

Следующее предложение сценария диалога определяет его стиль, для чего служит ключевое слово STYLE. Стиль диалога, как и вообще любого окна, задается с помощью символических констант, описывающих отдельные характеристики диалогового окна и объединяемых в одно слово с помощью побитовой операции ИЛИ (знак | ). Для модального диалога обычно используется специфический стиль DSMODALFRAME, определяющий наличие вокруг диалогового окна толстой рамки, позволяющей перемещать окно по экрану, но не изменять его размеры, а также общие для всех окон стили WSCAPTION для создания заголовка и WSSYS­ME­NU для включения в состав окна системного меню (последнее в диалоговых окнах вырождается в кнопку в правом верхнем углу окна). Стили DSMODALFRAME и WSCAPTION назначаются диалогу по умолчанию, и необходимым в нашем случае является только стиль WSSYSMENU. Для немодальных диалогов, о которых речь будет идти ниже, в стиль необходимо включать константу WSVI­SIBLE.

Далее в операторных скобках {...} определяется перечень элементов управления, включаемых в диалоговое окно. Этот перечень задается с помощью зарезервированных ключевых слов и позволяет разместить в диалоговом окне любые предусмотренные системой элементы – кнопки, списки, надписи и пр. В рассматриваемой программе используются лишь два элемента управления – статический элемент управления, т. е. попросту область с текстом, и нажимаемая кнопка.

Элементы управления описываются в файле ресурсов с помощью ключевого слова CONTROL, имеющего следующий формат:

CONTROL "текст", идентификатор, "класс", стиль, координаты

Параметр "текст" определяет тот текст, который будет выведен вместе с данным элементом управления. Для кнопок – это надпись на кнопке или рядом с ней; для области с текстом – строки, выводимые в указанную область, для групповой рамки – ее заголовок. Некоторые элементы управления не могут иметь текстового сопровождения и для них этот параметр игнорируется.

Идентификатор элемента управления, как и идентификаторы команд меню, представляет собой произвольное число, обычно указываемое в виде символической константы; он позволяет программе определить, от какого элемента управления пришло сообщение или, наоборот, какому элементу сообщение отправлено. В нашей программе в качестве идентификатора кнопки используется константа IDOK, которой в файле 4-1.H присвоено значение 100. Область с фиксированным текстом ("Автор программы...") не может посылать сообщений, и ее идентификатор не играет роли. Обычно таким идентификаторам дается значение -1.

В качестве третьего параметра предложения CONTROL указывается (в кавычках) класс элемента управления. В Windows имеется целый ряд предопределенных классов специфических окон, используемых в качестве элементов управления как в диалогах, так и в обычных окнах. Названия этих классов и указываются в предложениях CONTROL в файле ресурсов. Так, класс STATIC позволяет, в частности, создавать области с текстом; класс LISTBOX – списки; класс EDIT – окна редактирования, класс BUTTON – разнообразные кнопки. В Windows имеются и другие предопределенные классы.

В рамках указанного класса можно создавать элементы управления, различающиеся (иногда очень сильно) по внешнему виду и характеристикам. Конкретный вид элемента управления определяется его стилем. Так, для класса STATIC стиль SSCENTER задает область с текстом, выровненным по центру; стиль SSLEFT выравнивает указанный текст по левому краю; стиль SSICON (того же класса STATIC) не имеет отношения к текстам, а служит для получения изображения пиктограммы; стиль SSBITMAP позволяет вывести в диалоговое окно растровое изображение. Для класса LISTBOX стиль LBSSORT упорядочивает помещаемые в список текстовые строки; стиль WSVSCROLL снабжает список вертикальной полосой прокрутки; стиль LBSNOTIFY позволяет управлять списком посредством щелчков мыши. В рамках класса BUTTON можно создавать разнообразные кнопки – нажимаемые (стиль BSPUSHBUTTON), селективные (стиль AUTORADIOBUTON), кнопки-флажки (стиль BSAUTO­CHECKBOX) и др.

Следует заметить, что ключевые слова CONTROL, "STATIC", "BUT­TON" и др. могут писаться как прописными, так и строч­ными буквами, однако стили элементов управления (SSCENTER и BSPUSH­BUTTON в нашем примере), являясь предопределенными константами, могут указываться только прописными буквами (как и все прочие предопределенные константы, например, HWND­DESKTOP или IDCARROW).

Последний блок параметров предложения 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.

В приведенном варианте файла ресурсов для некоторых элементов управления указаны поясняющие надписи ("Статический элемент (текст)", "Окно редактирования", "Групповая рамка" и др.). У списка и комбинированного списка таких надписей-заголовков не предусмотрено, поэтому в файле ресурсов при их описании на соответствующих местах указаны пустые символьные строки (""). Содержимое же окон списка и комбинированного списка было помещено в эти элементы управления программно, при обработке сообщения WMINITDIALOG посредством вызовов (в цикле) функции 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

Выпадающий комбинированный список