На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

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);
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Опорный Процедура Окна Экранного Спасителя



Каждый экранный спаситель должен поддержать процедуру окна назвавшую ScreenSaverProc. Подобно большинству процедурам окна, ScreenSaverProc обрабатывает набор специфических сообщений и передает любые unprocessed сообщения во встроенную процедуру. Тем не менее, вместо прохождения них в функцию DefWindowProc, ScreenSaverProc передает unprocessed сообщения в функцию DefScreenSaverProc. Другое различие между ScreenSaverProc и нормальной процедурой окна - в том, что ручка пройденная на ScreenSaverProc идентифицирует целую настольную систему а не окно клиента. Следующий пример показывает процедуру окна ScreenSaverProc для экранного спасителя образца.

ДОЛГО (ДЛИНОЙ) WINAPI ScreenSaverProc(hwnd, сообщение, wParam, lParam) HWND hwnd;
СООБЩЕНИЕ UINT;
DWORD wParam;
ДОЛГО (ДЛИНОЙ) lParam;
{
статический hdc HDC; /* устройство-контекстная ручка */ статический rc RECT; /* СТРУКТУРА RECT */ статический UINT uTimer; /* таймерный идентификатор */

ключ(сообщение)
{
случай WM_CREATE:

/* Извлеките прикладное имя из file. .RC */

LoadString(hMainInstance, idsAppName, szAppName, 40);


/* Извлеките .INI filename. (или регистрация) */

LoadString(hMainInstance, idsIniFile, szIniFile, MAXFILELEN);

/* Извлеките любые перерисовывать-скоростные данные из registry. */

lSpeed = GetPrivateProfileInt(szAppName, szRedrawSpeed, DEFVEL, szIniFile);

/*
* Установите таймер для экранного окна спасателя, использовавшего the
* обновление изображения-показатель загружалось в REGEDIT.INI.

*/

uTimer = SetTimer(hwnd, 1, lSpeed * 1000, НЕДЕЙСТВИТЕЛЬНОЕ);
прерывание;

случай WM_ERASEBKGND:

/*
* Сообщение WM_ERASEBKGND выпущено перед the
* сообщение WM_TIMER, допускающее экранного спасателя, чтобы
* закрасьте фон как подходящий.
*/

hdc = GetDC(hwnd);
GetClientRect (hwnd, &rc);
FillRect (hdc, &rc, GetStockObject(BLACK_BRUSH));

ReleaseDC(hwnd,hdc);
прерывание;

случай WM_TIMER:

/*
* Сообщение WM_TIMER выпущено в (lSpeed * 1000)
* интервалы, где lSpeed == .001 секунды. Это
* код перекрашивает целую настольную систему с белым,
* зажгите серый, темный серый, или черная щетка каждый
* время сообщение WM_TIMER выпущено.
*/

hdc = GetDC(hwnd);
GetClientRect(hwnd, &rc);

если (я++ <= 4)
FillRect(hdc, &rc, GetStockObject(i));
еще (i = 0);
ReleaseDC(hwnd,hdc);
прерывание;

случай WM_DESTROY:

/*
* Когда сообщение WM_DESTROY выпущено, экранный спасатель
* должно уничтожить любое из таймеров, что были установлены в WM_CREATE
* время.
*/

если (uTimer) KillTimer(hwnd, uTimer);

прерывание;
}

/*
* DefScreenSaverProc ОБРАБАТЫВАЕТ любые сообщения
* проигнорированное ScreenSaverProc.
*/

возвращайте DefScreenSaverProc(hwnd, сообщение, wParam, lParam);
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz