<< Предыдущая страница

Содержание

Следующая страница >>

Раздел 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 в компьютерах учебных классов обычно закрыта для изменения.