Supporting the Screen Saver Window Procedure
Each screen saver must support a window procedure named
ScreenSaverProc. Like most window procedures,
ScreenSaverProc processes a set of specific messages and passes any unprocessed messages to a
default procedure. However, instead of passing them to the
DefWindowProc function,
ScreenSaverProc passes unprocessed messages to the
DefScreenSaverProc function. Another difference between
ScreenSaverProc and a normal window procedure is that the handle passed to
ScreenSaverProc identifies the entire desktop rather than a client window. The following
example shows the
ScreenSaverProc window procedure for the sample screen saver.
LONG WINAPI ScreenSaverProc(hwnd, message, wParam, lParam)
HWND hwnd;
UINT message;
DWORD wParam;
LONG lParam;
{
static HDC hdc; /* device-context handle */
static RECT rc; /* RECT structure */
static UINT uTimer; /* timer identifier */
switch(message)
{
case WM_CREATE:
/* Retrieve the application name from the .RC file. */
LoadString(hMainInstance, idsAppName, szAppName, 40);
/* Retrieve the .INI (or registry) filename. */
LoadString(hMainInstance, idsIniFile, szIniFile,
MAXFILELEN);
/* Retrieve any redraw-speed data from the registry. */
lSpeed = GetPrivateProfileInt(szAppName, szRedrawSpeed,
DEFVEL, szIniFile);
/*
* Set a timer for the screen saver window using the
* redraw-rate stored in REGEDIT.INI.
*/
uTimer = SetTimer(hwnd, 1, lSpeed * 1000, NULL);
break;
case WM_ERASEBKGND:
/*
* The WM_ERASEBKGND message is issued before the
* WM_TIMER message, allowing the screen saver to
* paint the background as appropriate.
*/
hdc = GetDC(hwnd);
GetClientRect (hwnd, &rc);
FillRect (hdc, &rc, GetStockObject(BLACK_BRUSH));
ReleaseDC(hwnd,hdc);
break;
case WM_TIMER:
/*
* The WM_TIMER message is issued at (lSpeed * 1000)
* intervals, where lSpeed == .001 seconds. This
* code repaints the entire desktop with a white,
* light gray, dark gray, or black brush each
* time a WM_TIMER message is issued.
*/
hdc = GetDC(hwnd);
GetClientRect(hwnd, &rc);
if (i++ <= 4)
FillRect(hdc, &rc, GetStockObject(i));
else
(i = 0);
ReleaseDC(hwnd,hdc);
break;
case WM_DESTROY:
/*
* When the WM_DESTROY message is issued, the screen saver
* must destroy any of the timers that were set at WM_CREATE
* time.
*/
if (uTimer)
KillTimer(hwnd, uTimer);
break;
}
/*
* DefScreenSaverProc processes any messages
* ignored by ScreenSaverProc.
*/
return DefScreenSaverProc(hwnd, message, wParam, lParam);
}
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database