В этой статье объясняется, как создать приложение, с помощью которого на Рабочем столе будут падать снежинки.
Когда приходят новогодние праздники, хочется написать игрушку для рабочего стола. Поэтому, мы напишем программу с эффектом падающих снежинок на Рабочем столе. Программа будет очень простой насколько это возможно.
Для этого необходимо проделать следующие шаги
Сначала займемся основным окном приложения. Нам нужно создать невидимое окно и предотвратить запуск более чем одной копии программы.
System.Threading;
...
private static Mutex m_Mutex;
...
m_Mutex = new Mutex(true, "SnowFallMutex");
if (m_Mutex.WaitOne(0, false))
Application.Run(new MainForm());
Далее установим значок в области уведомлений. Для для нас не составит проблемы.
Теперь займемся снежинками. Для начала создадим массив снежинок. В нашем приложении каждая снежинка создается как немодальная форма со своей зависимой от таймера функцией падения.
private void OnLoad(object sender, EventArgs e)
{
Rectangle rcWorkArea = Screen.PrimaryScreen.WorkingArea;
int nScreenWidth = rcWorkArea.Width;
int nTimer = 5;
int nPosX = 0;
Random r = new Random();
for (int i = 0; i < 10; i++)
{
nTimer = r.Next(50);
nPosX = r.Next(nScreenWidth);
FlakeDlg fd = new FlakeDlg(nTimer, nPosX);
fd.Show();
}
}
Перед запуском окна нам необходимо создать регион снежинки (flake region), который будет выглядеть как настоящая снежинка на экране. Воспользуемся функцией BitmapRegion.CreateControlRegion.
И последнее - запускаем таймер и смотрим на падающие снежинки. В программе использован очень простой алгоритм, однако он очень эффективен для показа снега на рабочем столе.
private void OnTimer(object sender, EventArgs e)
{
this.timerMove.Stop();
m_nCurrentY += 5;
m_nCounter++;
Random r = new Random();
if (m_nCounter == 15)
{
if ((r.Next(10) - 5) > 0) m_nIncrement = 1;
else m_nIncrement = -1;
m_nCounter = 0;
}
m_nCurrentX += m_nIncrement;
if (m_nCurrentY > m_nScreenHeight)
{
m_nCurrentY = 0;
m_nCurrentX = r.Next(m_nScreenWidth);
m_nTimer = r.Next(50) + 10;
}
this.Left = m_nCurrentX;
this.Top = m_nCurrentY;
this.timerMove.Interval = m_nTimer;
this.timerMove.Start();
}
Вы можете расширить возможности программы, добавив деда мороза и другие объекты. Также поэкспериментуруйте с позициями снежинок, их числом, скоростью падения и так далее.
Скачать пример
Источник:
Перевод: Василий Котов