关于屏幕保护程序

【勇芳软件工作室】汉化HomePreviousNext

Windows控制面板中的桌面应用程序允许用户从屏幕保护程序列表中进行选择,指定在启动屏幕保护程序之前经过多少时间,配置屏幕保护程序和预览屏幕保护程序。当Windows启动时或用户通过使用控制面板启动屏幕保护程序功能时,屏幕保护程序将自动加载。

一旦选择了屏幕保护程序,Windows会监视按键和鼠标移动,在一段时间不活动之后启动屏幕保护程序。但是,如果存在以下任何一种情况,则Windows不会启动屏幕保护程序:

*活动应用程序不是基于Windows的应用程序。

*有一个基于计算机的培训(CBT)窗口。

*活动应用程序收到WM_SYSCOMMAND消息,【wParam中】设置为SC_SCREENSAVE值,但不会将消息传递给DefWindowProc功能。

屏幕保护程序包含特定的导出功能,资源定义和变量声明。静态链接库SCRNSAVE.LIB包含屏幕保护程序所需的主要功能和其他启动代码。当屏幕保护程序启动时,SCRNSAVE.LIB中的启动代码创建一个全屏窗口。此窗口的窗口类声明如下。

WNDCLASS cls;

cls.hCursor = NULL;

cls.hIcon = LoadIcon(hInst, MAKEINTATOM(ID_APP));

cls.lpszMenuName = NULL;

cls.lpszClassName = "WindowsScreenSaverClass";

cls.hbrBackground = GetStockObject(BLACK_BRUSH);

cls.hInstance = hInst;

cls.style = CS_VREDRAW | CS_HREDRAW |

CS_SAVEBITS | CS_DBLCLKS;

cls.lpfnWndProc = (WNDPROC) ScreenSaverProc;

cls.cbWndExtra = 0;

cls.cbClsExtra = 0;

要创建屏幕保护程序,大多数开发人员创建一个包含三个必需功能的源代码模块,并将其与SCRNSAVE.LIB相链接。屏幕保护模块仅负责配置本身并提供视觉效果。

屏幕保护程序模块中的三个必需功能之一是ScreenSaverProc.此函数处理特定消息并将任何未处理的消息传递回SCRNSAVE.LIB。以下是ScreenSaverProc处理的一些典型消息。

信息含义
WM_CREATE从文件REGEDIT.INI中检索任何初始化数据。为屏幕保护程序窗口设置一个窗口计时器。执行任何其他所需的初始化。
WM_ERASEBKGND擦除屏幕保护程序窗口并准备随后的绘图操作。
WM_TIMER执行绘图操作。
WM_DESTROY销毁应用程序处理WM_CREATE消息时创建的计时器。执行任何额外的所需清理。

ScreenSaverProc通过调用DefScreenSaverProc函数将未处理的邮件传递给SCRNSAVE.LIB。下表介绍了如何处理各种消息。

信息行动
WM_SETCURSOR将光标设置为空光标,将其从屏幕中移除。
WM_PAINT画屏幕背景。
WM_LBUTTONDOWN终止屏幕保护程序。
WM_MBUTTONDOWN终止屏幕保护程序。
WM_RBUTTONDOWN终止屏幕保护程序。
WM_KEYDOWN终止屏幕保护程序。
WM_MOUSEMOVE终止屏幕保护程序。
WM_ACTIVATE如果【wParam中】为FALSE,则终止屏幕保护程序。

屏幕保护程序模块中的第二个必需功能是ScreenSaverConfigureDialog.此函数显示一个对话框,使用户能够配置屏幕保护程序。(因此,应用程序必须提供相应的对话框模板。)当用户在“控制面板”中的“桌面”应用程序的“屏幕保护程序”框中选择“设置”按钮时,Windows将显示配置对话框。用户使用配置对话框输入的数据存储在REGEDIT.INI文件中。

屏幕保护程序模块中的第三个必需功能是RegisterDialogClasses.所有屏幕保护程序应用程序必须调用此函数。但是,在配置对话框中不需要特殊窗口或自定义控件的应用程序可以简单地返回TRUE。需要自定义控件或特殊窗口的应用程序应使用此函数注册相应的窗口类。

除了创建一个支持刚刚描述的三个功能的模块之外,屏幕保护程序应该提供一个图标。仅当屏幕保护程序作为独立应用程序运行时,此图标才可见。(要由控制面板运行,屏幕保护程序必须具有.SCR文件扩展名;要作为独立应用程序运行,则必须具有.EXE文件扩展名。)图标必须在屏幕保护程序的资源文件中由常量ID_APP,它在头文件SCRNSAVE.H中定义。

一个最终要求是屏幕保护程序描述字符串。屏幕保护程序的资源文件必须包含控制面板显示为屏幕保护程序名称的描述性字符串。描述字符串必须是资源文件的字符串表中的第一个字符串(用序数值1标识)。