Опубликован: 28.04.2009 | Доступ: свободный | Студентов: 1840 / 107 | Оценка: 4.36 / 4.40 | Длительность: 16:40:00
Специальности: Программист
Лекция 4:

Хранитель экрана

4.5. Диалоговое окно конфигурации хранителя экрана

Настало время подумать об управлении пользовательскими настройками хранителя экрана. Работа нашего хранителя экрана управляется двумя параметрами: размером искр и максимальным числом искр, вылетающих в течение кванта времени, равного 5 миллисекунд. Второй параметр не является интуитивно понятным, ведь рядовому пользователю намного проще регулировать количество искр посредством ползунка "мало – много". Поэтому мы пойдем на небольшую хитрость: количество искр будет задаваться целочисленным параметром "плотность искр", лежащим в диапазоне от 0 (минимальное количество искр) до 9 (максимальное количество искр), а число искр, появляющихся каждые 5 секунд, будет рассчитываться уже на основе данного целочисленного параметра.

Итак, откройте вкладку настроек приложения (Properties | Setting) и добавьте в него два целочисленных параметра (рисунок 4.5):

 Вкладка настроек приложения

Рис. 4.5. Вкладка настроек приложения
  1. scintillaSize - размер искр. Значение по умолчанию 2
  2. scintillaDensity - плотность искр. Значение по умолчанию 5.

Для начала немного подкорректируйте обработчик события Load полноэкранной формы хранителя экрана, чтобы он брал настройки непосредственно из файла конфигурации приложения (листинг 4.14).

public partial class FullscreenForm : Form 
{
Properties.Settings settings;
private void FullscreenForm_Load(object sender, EventArgs e)
{ ...
// Загружаем настройки приложения из файла конфигурации (или настройки по умолчанию при
// отсутствии файла)
settings = new Properties.Settings();
try 
{ 
// Количество искр, генерируемых каждые 5 мс, рассчитывается методом "научного
тыка" firework = new Firework(Handle, (float)settings.scintillaSize,
(settings.scintillaDensity + 1) * 5); 
} 
... 
}
Листинг 4.14.

Теперь создайте новую форму и поместите на нее компоненты согласно рисунку 4.6 и таблице 4.2.

 Диалоговое окно параметры.

Рис. 4.6. Диалоговое окно параметры.
Таблица 4.2. Свойства формы диалогового окна и элементов управления.
Класс Свойство Значение
SettingsForm (диалоговое окно) Name SettingsForm
Text Параметры
ShowInTaskbar false
TopMost true
MinimizeBox false
MaximizeBox false
GroupBox Text Искры
Label Text Размер
TrackBar Name scintillaSizeTrackBar
Minimum 1
Maximum 4
Label Text Плотность
TrackBar Name scintillaDensityTrackBar
Minimum 0
Maximum 9
Button Name okButton
Text Ok
Button Name cancelButton
Text Отмена

Для автоматической инициализации элементов управления диалогового окна ползунки scintillaSizeTrackBar и scintillaDensityTrackBar необходимо связать со свойствами scintillaSize и scintillaDensity из конфигурационного файла приложения. Это операция легко выполняется посредством свойства Application Settings | Value ползунков (рисунок 4.7).

 Привязка значения ползунка scintillaSizeTrackBar к свойству scintillaSize файла конфигурации

Рис. 4.7. Привязка значения ползунка scintillaSizeTrackBar к свойству scintillaSize файла конфигурации

Следующий шаг - оживление формы посредством реализации нехитрых обработчиков сообщений (листинг 4.15).

public partial class SettingsForm : Form 
{
public SettingsForm()
{
InitializeComponent();
}
// Обработчик нажатия кнопки Ok
private void okButton_Click(object sender, EventArgs e) 
{
Properties.Settings settings = new Properties.Settings();
// Задаем новые значения свойств файла конфигурации
settings.scintillaSize = scintillaSizeTrackBar.Value;
settings.scintillaDensity = scintillaDensityTrackBar.Value;
// Сохраняем информацию в файле 
settings.Save();
// Закрываем форму и завершаем приложение
 Close ();
 }
// Обработчик нажатия кнопки Отмена
private void cancelButtonClick(object sender, EventArgs e)
{ 
// Просто завершаем приложение, не сохраняя изменения 
Close ();
} 
}
Листинг 4.15.

Как говорилось в начале лекции, диалоговое окно настроек хранителя экрана должно отображаться в 3-х случаях:

  • Если приложение запущено без параметров.
  • Если приложение запущено с ключом /C.
  • Если приложение запущено с параметром вида /C:n, где n - дескриптор диалогового окна Display Properties. Например, /C:299792.

Для начала, мы можем попробовать добавить в функцию Main статического класса Program следующий код:

static void Main()
{
// Если приложение запущено без параметров или первый параметр начинается на "/C"
if ((args.Length == 1) || ((args.Length == 2) && 
 (args [1] .Length >= 2) && (args [1] .ToUpper () .Substring(0, 3) == "/C")))
{ 
// Отображаем диалоговое окно
Application.Run(new SettingsForm());
 return;
} 
}
Листинг 4.16.

В принципе, подобный подход является вполне работоспособным, если не считать одной особенности: диалоговое окно может появиться на совершенно другом конце экрана (и даже на другом мониторе) относительно окна Display Properties. Для хранителя экрана, сделанного на профессиональном уровне, такое поведение не допустимо, поэтому нам необходимо решить данную проблему.

 Начальное положение диалоговое окна Параметры не связано с текущим положением окна Display Properties

увеличить изображение
Рис. 4.8. Начальное положение диалоговое окна Параметры не связано с текущим положением окна Display Properties
Андрей Леонов
Андрей Леонов

Reference = add reference, в висуал студия 2010 не могу найти в вкладке Solution Explorer, Microsoft.Xna.Framework. Его нету.