LAB4 (Методические указания к лабораторным работам)
Описание файла
Файл "LAB4" внутри архива находится в папке "Методические указания к лабораторным работам". Документ из архива "Методические указания к лабораторным работам", который расположен в категории "". Всё это находится в предмете "программирование в среде windows" из 4 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "программирование в среде windows" в общих файлах.
Онлайн просмотр документа "LAB4"
Текст из документа "LAB4"
Лабораторная работа 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". Данный формат описания можно использовать для любых органов управления.
Функция диалога
Перед созданием диалоговой панели, помимо шаблона диалога, программисту необходимо подготовить функцию диалога, предназначенную для обработки сообщений, поступающих от диалоговой панели. Эта функция должна быть описана следующим образом:
BOOL CALLBACK _export DlgProc (HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam);
Вы можете выбрать для функции диалога любое имя.
В отличие от функции окна, функция диалога не должна вызывать функцию DefWindowProc для тех сообщений, которые она не желает обрабатывать. Если функция диалога обрабатывает сообщение, она должна вернуть значение TRUE, а если нет - FALSE.
Функция диалога не обрабатывает сообщения WM_CREATE, WM_PAINT, WM_DESTROY. При инициализации диалога в функцию диалога вместо сообщения WM_CREATE передается сообщение WM_INITDIALOG. Как правило, функция диалога всегда обрабатывает сообщения WM_INITDIALOG и WM_COMMAND.
Сообщение WM_INITDIALOG использует параметры wParam и lParam.
Параметр wParam содержит идентификатор органа управления, который первым получит фокус ввода после отображения диалоговой панели. Это первый орган управления, описанный в шаблоне диалога со стилем WM_TABSTOP. Параметр lParam содержит значение, передаваемое приложением при создании диалоговой панели.