Раздел 3. Окна диалога Windows, реестр Windows
Модальные и немодальные окна диалога
Окно диалога это специальный вид окна, предназначенный обычно для взаимодействия пользователя с элементами управления, расположенными внутри диалогов. Окна диалогов бывают модальными (modal) и немодальными (modeless). (modal). Модальные диалоговые окна не дают пользователю возможность перенести фокус ввода на другое окно в том же программном потоке. То есть при открытом модальном диалоге сообщения не поступают в цикл обработки сообщений главного окна. В случае немодального диалога, сообщения поступают в цикл обработки сообщений главного окна приложения и должны быть перенаправлены в окно диалога.
Диалоговые окна обычно строятся на основе специального типа ресурсов – шаблона окна диалога, который создается с помощью визуальных средств пакета Visual Studio. Для создания модального диалогового окна нужно вызвать функцию API - Dialog Box и передать ей в качестве параметров: ресурс диалога, на основе которого будет строиться диалоговое окно; ссылку на окно родителя или NULL, если окно не имеет родителя и является главным окном приложения; адрес оконной процедуры диалога. Оконная процедура диалога обрабатывает сообщения, поступающие в окно диалога. Эта функция возвращает управление только после закрытия окна диалога. Обработка сообщений диалоговыми окнами имеет свои особенности, сообщение WM_PAINT и WM_DESTROY – диалогом не обрабатываются. Вместо сообщения WM_CREATE для инициализации диалога, посылается специальное сообщение WM_INITDIALOG. Как правило, диалоговое окно обрабатывает только сообщение WM_COMMAND, которое посылается большинством элементов управления, расположенных в диалоге. Взаимодействие с элементами управления осуществляется с помощью сообщений, которые могут быть посланы с помощью функции SendMessage с нужным набором параметров. Первым параметром функции SendMessage обычно служит указатель на элемент управления, полученный с помощью вызова функции GetDlgItem.
В отличие от модальных диалоговых окон, немодальные создаются с помощью функции CreateDialog. Закрыть немодальное диалоговое окно можно с помощью функции DestroyWindow, желательно при этом обнулить также дескриптор окна диалога. При создании ресурса немодального окна диалога нужно указывать стиль шаблона диалога WS_VISEBLE, иначе диалоговое окно не будет видимым, и нужно будет вызывать функцию ShowWindow, чтобы его показать.
Диалоговые окна общего пользования
Для стандартизации диалогов открытия и сохранения файлов, поиска и замены текста, печати, выбора цветов и шрифтов могут использовать специальные функции Windows, расположенные в динамической библиотеке - COMDLG32.dLL: GetOpenFileName, GetSaveFileName, FindText, ReplaceText, PrintDlg, ChooseColor, ChooseFont. Для использования этих функций в первую очередь необходимо проинициализировать поля соответствующей структуры и передать функции указатели на эту структуру. Функции создают и отображают окно диалога. Когда пользователь закрывает окно диалога, то в соответствующем поле структуры будет содержаться его выбор.
Работа с реестром Windows
Реестр Windows представляет собой иерархическую базу данных, в верху которой расположены пять главных ключей: HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS. В каждом главном ключе в свою очередь могут находиться ключи. Ключи могут содержать другие ключи и данные. Данные имеют имя и значение. Посмотреть содержимое реестра можно, набрав в командной строке Windows regedit.
Ключи HKEY_LOCAL_MACHINE и HKEY_CURRENT_USER содержат приблизительно одинаковое содержание, отличие заключается в том, что данные записанные в иерархию HKEY_LOCAL_MACHINE справедливы для всех пользователей. Данные собранные в иерархию HKEY_CURRENT_USER будут находиться в этом ключе реестра только во время работы данного пользователя.
Чтобы записать или считать данные в ключ реестра этот ключ должен быть сначала открыт вызовом функции RegCreateKeyEx или RegOpenKeyEx. Записать данные в реестр можно функцией RegSetValueEx, а считать функцией RegQueryValueEx. После окончания работы с ключом, его надо закрыть функцией RegCloseKey.
Задание 3. Добавить в программу, разработанную в задание 2 пункт меню, вызывающий диалоговую панель и перенести в эту панель управление выбором и установкой свойств диаграммы. Добавить возможность сохранения настроек в реестре и считывание из него. Предусмотреть возможность закрытия диалога. Использовать стандартные диалоги для выбора шрифтов, файлов, цветов, если в задании явно не оговорен другой способ.
Цель: изучение взаимодействия с окнами диалога Windows, получение навыков работы с реестром.
Таблица 3
Варианты задания 3
№ варианта | Задание |
1 | Сектор задается в раскрывающемся списке, интенсивность синего цвета меняется с помощью ползунка, проценты задаются в поле редактирования, шрифт выбирается и отображается, диалог модальный |
2 | Выбора цвета с отображением на картинке, размер столбиков отображается в поле редактирования и меняется с помощью счетчика, диалог немодальный. |
3 | Размер шрифта выбирается в списке, цвет выбирается и отображается, сектор выбирается в раскрывающемся списке, диалог модальный. |
4 | Шрифт выбирается и отображается, размеры столбиков меняются в поле редактирования или с помощью счетчика, столбик выбирается в раскрывающемся списке, диалог немодальный. |
5 | Масштаб меняется с помощью кнопок выбора, шрифт выбирается и отображается, размер столбиков задается ползунком, диалог модальный. |
6 | Растр выбирается из файла и отображается, масштаб задается в раскрывающемся списке, диалог немодальный |
7 | Размер столбиков задается с помощью счетчика и отображается в поле редактирования, цвет выбирается и отображается, интенсивность цвета меняется ползунком, диалог модальный. |
8 | Цвет выбирается и отображается как на рисунке, так и значениями в системе RGB, размер столбиков задается с помощью счетчика и отображается в поле редактирования, диалог модальный. |
9 | Толщина границы задается в поле редактирования, цвет выбирается и отображается, отношение сторон треугольника задается кнопками выбора, диалог немодальный. |
10 | Цвет выбирается, и интенсивность его изменяется ползунком, размер столбиков задается с помощью счетчика и отображается в поле редактирования, диалог модальный. |
11 | X меняется ползунком и отображается, цвет задается и отображается, и его интенсивность меняется с помощью счетчика, диалог немодальный. |
12 | Цвет выбирается и отображается, столбик выбирается в раскрывающемся списке, длина столбика меняется с помощью счетчика, диалог немодальный. |
13 | Растр выбирается из файла и отображается, шрифт выбирается и его размер и величина отображается, величина шрифта может меняться с помощью счетчика, диалог модальный. |
14 | Шрифт выбирается и отображается, цвет заливки выбирается и отображается, интенсивность цвета меняется ползунком, диалог немодальный. |
15 | Цвет контура выбирается и отображается, величина столбиков отображается и меняется с помощью ползунка, толщина границ меняется с помощью счетчика, диалог модальный. |
16 | Номер столбика выбирается из раскрывающегося списка, а его размер меняется с помощью ползунка, шрифт выбирается и отображается, диалог немодальный. |
17 | Цвет выбирается и отображается, интенсивность заливки меняется с помощью счетчика, размер первого столбика отображается и меняется ползунком, диалог модальный. |
18 | Цвет сектора выбирается из раскрывающегося списка, цвет его границы с помощью стандартного диалога, X задается с помощью кнопок выбора, диалог немодальный. |
19 | X меняется счетчиком, шрифт выбирается, толщина границ выбирается кнопками выбора, диалог модальный. |
20 | X меняется ползунком в пределах: 0-100%, название шрифта выбирается из раскрывающегося списка, размер шрифта задается кнопками выбора, цвет выбирается и отображается, диалог модальный. |
21 | Цвет выбирается и отображается, X меняется ползунком, толщина границ выбирается с помощью счетчика, диалог модальный. |
22 | Цвет выбирается и отображается, значения его составляющих корректируются, X задается ползунком, диалог немодальный. |
23 | Растр выбирается и отображается, толщина границ задается с помощью раскрывающегося списка, цвет границы выбирается с помощью кнопок выбора, диалог модальный. |
24 | Цвет выбирается из раскрывающегося списка, шрифт выбирается и отображается, его размер меняется в поле редактирования, диалог модальный. |
25 | X выбирается кнопками выбора, цвет выбирается и отображается, шрифт выбирается и его величина меняется с помощью счетчика, диалог немодальный. |
Указания. При использовании раскрывающегося списка, данные заносятся в него вызовами функции SendMessage. Чтобы установить число строк раскрывающегося списка в редакторе ресурсов необходимо щелкнуть мышью на треугольнике раскрытия списка, а затем растянуть список вниз.
Для использования в программе ползунка и счетчика, нужно включить заголовочный файл commctrl.h и подключить библиотеку comctl32.lib, для использования стандартных диалогов – commdlg.h.
При создании немодального окна диалога нужно указывать стиль шаблона диалога WS_VISIBLE, иначе диалоговое окно не будет видимым и нужно будет вызывать функцию ShowWindow, чтобы его показать.
Сохранять данные в реестре нужно в иерархии HKEY_CURRENT_USER, так как иерархия HKEY_LOCAL_MACHINE в компьютерах учебных классов обычно закрыта для изменения.