Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB4.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
153.09 Кб
Скачать

Лабораторная работа 4 Создание диалоговых панелей.

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

Первый способ предполагает включение в файл ресурсов текстового описания шаблона диалоговой панели. Это описание можно создать при помощи любого текстового редактора:

DIALOG_BOX DIALOG 25, 34, 152, 67

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "Приложение DIALOG"

BEGIN

CTEXT "Microsoft Windows Application\n"

"Приложение DIALOG",

-1, 28, 9, 117, 26, WS_CHILD | WS_VISIBLE | WS_GROUP

ICON "APPICON", -1, 6, 14, 16, 16, WS_CHILD | WS_VISIBLE

DEFPUSHBUTTON "OK", IDOK, 56, 43, 36, 14,

WS_CHILD | WS_VISIBLE | WS_TABSTOP

END

Определен шаблон диалоговой панели с идентификатором DIALOG_BOX. Расположение и размеры диалоговой панели определяются цифрами, стоящими после оператора DIALOG.

Вторая строка описания (оператор STYLE) предназначена для определения стиля временного окна, на поверхности которого будут расположены органы управления.

Далее следует описание заголовка диалоговой панели (оператор CAPTION).

Между строками BEGIN и END находится описание органов управления и пиктограмм. В нашем случае это статический орган управления (оператор CTEXT), пиктограмма (ICON) и кнопка (DEFPUSHBUTTON). Для каждого органа управления приводится вся необходимая информация - заголовок, стиль, расположение и размеры.

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

Диалоговая панель обычно представляет собой временное (pop-up) окно, хотя допустимо использовать и перекрывающиеся (overlapped) окна. В программном интерфейсе Windows определены функции, специально предназначенные для создания диалоговых панелей.

Разумеется, перед вызовом этих функций необходимо создать шаблон диалоговой панели. Помимо шаблона, перед созданием диалоговой панели вам следует определить специальную функцию диалога, в которую будут поступать сообщения от функции окна диалоговой панели (которые, в свою очередь, поступают туда от органов управления). Имя функции обратного вызова можно занести в раздел EXPORTS файла определения модуля.

Итак, для создания диалоговой панели вы должны предпринять следующие действия:

  • создать шаблон диалога;

  • определить функцию диалога;

  • вызвать одну из функций создания диалога.

Создание шаблона диалога.

Использование текстового редактора. Вы можете создать диалоговую панель без применения редакторов диалога, создав описание шаблона при помощи любого текстового редактора, сохраняющего текст без атрибутов форматирования.

Описание шаблона имеет следующий вид:

nameID DIALOG [load] [mem] x, y, width, height

CAPTION "Заголовок диалоговой панели"

STYLE Стиль

BEGIN

. . .

. . .

END

В этом описании nameID используется для идентификации шаблона диалоговой панели и может указываться либо в виде текстовой строки, либо в виде числа от 1 до 65535.

Параметр load - необязательный. Он используется для определения момента загрузки диалоговой панели в память.

Параметр mem также необязательный. Он влияет на тип выделяемой для хранения шаблона памяти и может указываться как FIXED, MOVEABLE, DISCARDABLE.

Параметры x и y определяют, соответственно, x-координату левой границы диалоговой панели и y-координату верхней стороны диалоговой панели. Координаты могут принимать значения от 0 до 65535.

Параметры width и height определяют, соответственно, ширину и высоту диалоговой панели. Эти параметры могут находиться в диапазоне от 1 до 65535.

Для описания шаблонов диалоговых панелей используется специальная координатная система, в которой размер единицы длины в пикселях зависит от размера системного шрифта. Одна единица длины составляет четверть средней ширины символов системного шрифта, а при описании высоты (или вертикальных размеров) - восьмую часть высоты символов системного шрифта. Эта единица называется диалоговая единица (dialog unit).

Размер единицы измерения dialog unit можно получить при помощи функции GetDialogBaseUnits:

DWORD WINAPI GetDialogBaseUnits(void);

Младшее слово возвращаемого значения представляет собой ширину в пикселях диалоговой единицы длины, старшее - высоту.

Оператор CAPTION предназначен для определения заголовка диалоговой панели.

В качестве стиля можно использовать комбинацию символических имен, определенных в файле windows.h и имеющих префикс WS_. Специально для диалоговых панелей в этом файле определены несколько констант с префиксом DS_.

Имя константы

Описание

DS_LOCALEDIT

При использовании этого стиля редакторы текста, созданные в диалоговой панели, будут использовать память в сегменте данных приложения. В этом случае можно использовать сообщения EM_GETHANDLE и EM_SETHANDLE

DS_MODALFRAME

Создается модальная диалоговая панель (см. ниже)

DS_NOIDLEMSG

Если этот стиль не указан, когда диалоговая панель переходит в видимое состояние (отображается), Windows посылает родительскому окну (создавшему диалоговую панель), сообщение WM_ENTERIDLE

DS_SYSMODAL

Создается системная модальная диалоговая панель

Для создания стандартной диалоговой панели используются стили WS_POPUP, WS_BORDER, WS_SYSMENU, WS_CAPTION, DS_MODALFRAME. Если нужно создать диалоговую панель с рамкой, но без заголовка, используется стиль WS_DLGFRAME.

Диалоговые панели бывают трех типов: модальные, системные модальные, и немодальные.

При выводе на экран модальной диалоговой панели работа приложения приостанавливается. Функции главного окна приложения и всех дочерних окон перестают получать сообщения от мыши и клавиатуры. Все эти сообщения попадают в временное (pop-up) окно диалоговой панели. Когда работа пользователя с диалоговой панелью будет завершена, главное окно приложения и его дочерние окна будут разблокированы. Диалоговая панель не должна создаваться как дочернее окно - в этом случае приложение "зависнет".

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

Немодальная диалоговая панель не блокирует работу основного окна приложения и его дочерних окон.

Помимо операторов STYLE и CAPTION, описание шаблона может содержать операторы CLASS и FONT. Оператор CLASS используется в тех случаях, когда диалоговая панель использует свой собственный класс, а не тот, который определен для диалоговых панелей операционной системой Windows:

CLASS "PrivateDlgClass"

Перед созданием диалоговой панели с собственным классом этот класс должен быть зарегистрирован. При этом в структуре WNDCLASS, используемой для регистрации, поле cbWndExtra должно иметь значение DLGWINDOWEXTRA.

Оператор FONT позволяет задать шрифт, с использованием которого Windows будет писать текст в диалоговой панели: FONT 10, "MS Serif". Первый параметр оператора FONT указывает размер шрифта в пунктах, второй - название шрифта, определенного в файле win.ini).

Описание всех органов управления, расположенных на поверхности диалоговой панели, должно находиться между строками BEGIN и END.

Для описания органов управления используются три формата строк.

Первый формат можно использовать для всех органов управления, кроме списков, редакторов текста и полосы просмотра: CtlType "Текст", ID, x, y, width, height [,style]

Вместо CtlType в приведенной выше строке должно находиться обозначение органа управления.

Параметр "Текст" определяет текст, который будет написан на органе управления.

Параметр ID - идентификатор органа управления. Этот идентификатор передается вместе с сообщением WM_CONTROL.

Параметр style определяет стиль органа управления (необязательный параметр). Это тот самый стиль, который указывается при вызове функции CreateWindow.

Приведем список обозначений органов управления и возможных стилей для первого формата.

Обозначение органа управления

Класс окна

Описание и стиль, используемый по умолчанию

CHECHBOX

button

Переключатель в виде прямоугольника BS_CHECKBOX, WS_TABSTOP

CTEXT

static

Строка текста, выровненная по центру SS_CENTER, WS_GROUP

DEFPUSHBUTTON

button

Кнопка, выбираемая в диалоговой панели по умолчанию BS_DEFPUSHBUTTON, WS_TABSTOP

GROUPBOX

button

Прямоугольник, объединяющий группу органов управления BS_GROUPBOX

ICON

static

ПиктограммаSS_ICON Параметры width, height и style можно не указывать

LTEXT

static

Строка текста, выровненная по левой границе органа управления SS_LEFT, WS_GROUP

PUSHBUTTON

button

КнопкаBS_PUSHBUTTON, WS_TABSTOP

RADIOBUTTON

button

Переключатель в виде кружка (радиопереключатель) BS_RADIOBUTTON, WS_TABSTOP

RTEXT

static

Строка текста, выровненная по правой границе органа управления SS_RIGHT, WS_GROUP

Второй формат используется для описания списков, редакторов текста и полос просмотра:

CtlType ID, x, y, width, height [,style]

В этом формате нет параметра "Текст", остальные параметры используются так же, как и в первом формате.

Приведем список обозначений органов управления и возможных стилей для второго формата.

Обозначение органа управления

Класс окна

Описание и стиль, используемый по умолчанию

COMBOBOX

combobox

Список с окном редактирования CBS_SIMPLE, WS_TABSTOP

LISTBOX

listbox

Список LBS_NOTIFY, WS_BORDER

EDITTEX

edit

Редактор текста ES_LEFT, WS_BORDER, WS_TABSTOP

SCROLLBARS

scrollbar

Полоса просмотраSBS_HORZ

Третий формат описания органов управления наиболее универсальный:

CONTROL "Текст", ID, class, style, x, y, width, height

Этот формат позволяет описать орган управления, принадлежащий классу class, который указывается в виде строки символов. Вы можете использовать третий формат для описания предопределенных классов органов управления, таких как "button", "combobox", "edit", "listbox", "scrollbar", "static". Данный формат описания можно использовать для любых органов управления.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]