Лабораторная работа № 3 Диалоги и элементы управления
3.1 Цель работы:
Изучить основы программирования при работе с диалоговыми окнами и элементами управления Windows.
Изучаемые вопросы:
1. Модальный и немодальный диалог. Назначение и классификация диалоговых окон.
2. Создание, уничтожение.
3. Задание размеров диалогового окна.
4. Диалоговые функции. Отличие диалоговых от оконных функций.
5. Шаблон, ресурсы окна диалога.
6. Стандартный диалог.
7. Сообщения работы с модальным и немодальным диалоговыми окнами.
8. Элементы управления
9. Поле для ввода. Кнопка. Список. Комбинированный список. Слайдер.
10. Сообщения к элементам управления SendMessage, SendDlgItemMessage.
11. Обработка сообщений от элементов диалогового окна.
12. Корректность вводимых данных.
13. Окна сообщений.
14. Использование окон сообщений.
15. Стандартные диалоги
3.2 Постановка задачи:
Разработать приложение, которое содержит:
Варианты:
- Создать многодиалоговоеWin32 приложение, использующее модальный, системный модальный, немодальный и стандартный диалоги, и элементы управления типа кнопка, меню, список, трекбар, поле для ввода.
- Составить Win32 App проект: инженерный калькулятор, который позволяет выполнять операции деления, умножения, сложения и вычитания, извлечения корня, квадрат и куб операнда, извлечение числа из степени; реализовывать логарифмические и тригонометрические функции над введенным числом; сохранять и загружать в/из памяти результат. Калькулятор поместить на модальное окно диалога, результат операций поместить в немодальное окно в компонент ListBox. Предусмотреть редактирование строк в ListBox.
- Составить Win32 App проект Электронная библиотека. На немодальное окно диалога разместить управление поиском книг по автору и названию книги: просмотр всех записей, редактирование выбранной записи, удаление выбранной записи, добавление новой информации, которая вводится в созданное модальное окно диалога. Поля для ввода: автор, название, год выпуска, издательство, количество страниц.
- Составить Win32 App проект простейший текстовый редактор, который позволяет выполнять операции редактирование текста, копирование и вставку из одного окна проекта в другое окно проекта. На немодальном диалоге разместить кнопки вызова стандартного диалога Шрифта. Выбранный шрифт применяется к тексту в редакторе. (данная работа использует материал из контрольной работы).
- Составить Win32 App проект автомобильного каталога. На немодальное окно диалога разместить управление каталогом: просмотр всех записей, редактирование выбранной записи, удаление выбранной записи, добавление новой информации, которая вводится в созданное модальное окно диалога. Поля для ввода: Фирма, марка, год выпуска, объем двигателя, максимальная скорость, мощность двигателя.
- Составить Win32 App проект каталога по недвижимости. На немодальное окно диалога разместить управление каталогом: просмотр всех записей, редактирование выбранной записи, удаление выбранной записи, добавление новой информации, которая вводится в созданное модальное окно диалога. Поля для ввода: Тип недвижимости, площадь, год постройки, место расположение, этаж, телефон, стоимость, контакты.
- Составить Win32 App проект каталога электротоваров. На немодальное окно диалога разместить управление каталогом: просмотр всех записей, редактирование выбранной записи, удаление выбранной записи, добавление новой информации, которая вводится в созданное модальное окно диалога. Поля для ввода: Фирма, марка, год выпуска, мощность, описание, гарантия, контактная информация.
- Составить Win32 App проект Электронный переводчик. На немодальное окно диалога разместить управление переводчиком: просмотр всех записей, редактирование выбранной записи, удаление выбранной записи, поиск по введенному слову, добавление новой информации, которая вводится в созданное модальное окно диалога. Поля для ввода: слово, перевод, часть речи.
- Составить Win32 App проект “Смешение цветов” на модальном диалоге разместить трекбары или скролбары для смешения каждой составляющей одного из трех цветов (красного, зеленого, синего) от 0 до 255, целочисленное значение цвета задавать путем изменение позиции бегунка трекбара или скролбара, или бутем ввода числа в поле для ввода. На немодальном диалоге отображать каждую цветовую компоненту и смесь трех цветов.
3.3 Теоретические сведения:
Модальное диалоговое окно
Большинство диалоговых окон имеет окно владельца (или чаще просто, владелец). При создании блока диалога, прикладная программа устанавливает владельца, при помощи определения дескриптора окна владельца. Windows использует владельца, чтобы регулировать позицию диалогового окна в Z-последовательности так, чтобы блок диалога всегда устанавливался выше своего владельца. Windows также может посылать сообщения оконной процедуре владельца, уведомляя его о событиях в диалоговом окне.
Windows автоматически скрывает или уничтожает диалоговое окно всякий раз, когда его владелец скрывается или разрушается. Это означает, что процедура диалогового окна не требует какой-либо специальной обработки, чтобы обнаружить изменения в состоянии окна владельца.
Модальное диалоговое окно должно быть выскакивающим окном, имеющим Системное меню, строку заголовка, и жирную рамку; то есть, шаблон блока диалога должен установить стили WS_POPUP, WS_SYSMENU, WS_CAPTION и DS_MODALFRAME. Хотя прикладная программа может определять и стиль WS_VISIBLE, Windows всегда показывает модальное диалоговое окно независимо от того, устанавливает ли шаблон диалогового окна стиль WS_VISIBLE. Приложение не должно создавать модальное диалоговое окно, имеющее стиль WS_CHILD. Модальный блок диалога с этим стилем отключает сам себя, не допуская какого-либо последующего ввода данных из связанной с ним прикладной программы.
Прикладная программа создает модальное диалоговое окно, используя или функцию DialogBox или DialogBoxIndirect. DialogBox требует названия или идентификатора ресурса, содержащего шаблон блока диалога; DialogBoxIndirect требует дескриптора объекта памяти, содержащего шаблон диалогового окна.
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
Немодальное диалоговое окно
Немодальные диалоговые окна должны быть выскакивающими окнами, у которых есть Системное меню, строка заголовка и тонкая рамка; то есть, шаблон блока диалога должен установить стили WS_POPUP, WS_CAPTION, WS_BORDER и WS_SYSMENU. Windows автоматически не показывает диалоговое окно, если в шаблоне не установлен стиль WS_VISIBLE.
Прикладная программа создает немодальное диалоговое окно, используя функции или CreateDialog, или CreateDialogIndirect. CreateDialog требует названия или идентификатора ресурса, содержащего шаблон блока диалога; CreateDialogIndirect требует дескриптора объекта памяти, содержащего шаблон диалогового окна. Две другие функции, CreateDialogParam и CreateDialogIndirectParam, тоже создают немодальное диалоговое окно; функции, когда окно создается, посылают заданный параметр в процедуру блока диалога.
CreateDialog(hInst,(LPCTSTR)IDD_NOMODAL,hWnd,(DLGPROC)NoModal);
Процедура диалогового окна
Процедура диалогового окна подобна оконной процедуре, в которую Windows посылает сообщения, чтобы процедура, когда она имеет информацию, задала или завершила задачи. В отличие от оконной процедуры, процедура диалогового окна никогда не вызывает функцию DefWindowProc. Вместо этого, она возвращает Булево значение ИСТИНА (TRUE), если она обрабатывает сообщение или ЛОЖЬ(FALSE), если она этого не делает.
Большинство процедур диалогового окна обрабатывает сообщение WM_INITDIALOG и сообщения WM_COMMAND, передаваемые элементом управления, но обрабатывает немногие, если имеются какие-либо другие сообщения. Если процедура диалогового окна не обрабатывает сообщение, она должна возвратить значение ЛОЖЬ(FALSE), чтобы заставить Windows обработать сообщения внутри себя. Единственное исключение из этого правила - сообщение WM_INITDIALOG. Процедура диалогового окна должна возвратить значение ИСТИНА (TRUE), чтобы направить в Windows сообщение WM_INITDIALOG для дальнейшей обработки. В любом случае, процедура не должна вызвать DefWindowProc.