mirror of
https://github.com/reactos/reactos.git
synced 2024-08-28 22:28:36 +00:00
121 lines
2.9 KiB
C
121 lines
2.9 KiB
C
/*
|
|
* Copyright 2008 Marc Piulachs (marc.piulachs@codexchange.net)
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
|
*/
|
|
|
|
#include <windows.h>
|
|
#include <scrnsave.h>
|
|
#include <tchar.h>
|
|
#include "resource.h"
|
|
|
|
#define RANDOM_COLOR (rand () % 256)
|
|
|
|
#define APPNAME _T("Circles")
|
|
#define APP_TIMER 1
|
|
#define APP_TIMER_INTERVAL 100
|
|
#define MAX_CIRCLES 50
|
|
|
|
int circlesCount;
|
|
int width, x, y;
|
|
|
|
LRESULT WINAPI ScreenSaverProc (HWND hwnd, UINT iMsg, WPARAM wparam,
|
|
LPARAM lparam)
|
|
{
|
|
HDC hdc;
|
|
RECT rect;
|
|
HBRUSH hbrush, hbrushOld;
|
|
|
|
switch (iMsg)
|
|
{
|
|
case WM_CREATE:
|
|
{
|
|
SetTimer (
|
|
hwnd,
|
|
APP_TIMER,
|
|
APP_TIMER_INTERVAL,
|
|
NULL);
|
|
}
|
|
break;
|
|
case WM_DESTROY:
|
|
{
|
|
KillTimer (hwnd, APP_TIMER);
|
|
PostQuitMessage (0);
|
|
return 0;
|
|
}
|
|
break;
|
|
case WM_TIMER:
|
|
{
|
|
hdc = GetDC (hwnd);
|
|
GetClientRect (hwnd, &rect);
|
|
hbrush = CreateSolidBrush (RGB (RANDOM_COLOR, RANDOM_COLOR, RANDOM_COLOR));
|
|
hbrushOld = SelectObject (hdc, hbrush);
|
|
|
|
x = rand () % rect.right;
|
|
y = rand () % rect.bottom;
|
|
|
|
/* the circle will be 10% of total screen */
|
|
width = rect.right / 10;
|
|
if (rect.bottom / 10 < width)
|
|
width = rect.bottom / 10;
|
|
|
|
/* Draw circle on screen */
|
|
Ellipse (
|
|
hdc,
|
|
x,
|
|
y,
|
|
x + width,
|
|
y + width);
|
|
|
|
//Track the number of painted circles on scren
|
|
circlesCount++;
|
|
if (circlesCount == MAX_CIRCLES)
|
|
{
|
|
InvalidateRect (hwnd, NULL, TRUE);
|
|
circlesCount = 0;
|
|
}
|
|
|
|
SelectObject (hdc, hbrushOld);
|
|
DeleteObject (hbrush);
|
|
ReleaseDC (hwnd, hdc);
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
return DefScreenSaverProc (hwnd, iMsg, wparam, lparam);
|
|
}
|
|
|
|
|
|
BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
// This function is only called one time before opening the configuration dialog.
|
|
// Use it to show a message that no configuration is necesssary and return FALSE to indicate that no configuration dialog shall be opened.
|
|
BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
|
|
{
|
|
TCHAR szMessage[256];
|
|
TCHAR szTitle[25];
|
|
|
|
LoadString(hInst, IDS_TEXT, szMessage, sizeof(szMessage) / sizeof(TCHAR));
|
|
LoadString(hInst, IDS_DESCRIPTION, szTitle, sizeof(szTitle) / sizeof(TCHAR));
|
|
|
|
MessageBox(NULL, szMessage, szTitle, MB_OK | MB_ICONEXCLAMATION);
|
|
|
|
return FALSE;
|
|
}
|