收集关于如何编写屏幕保护的资料

如何编写屏幕保护程序(阿卓)


   对于屏幕保护程序,大家不会陌生吧?一般屏幕保护程序都是一些设计精美、变幻无穷的动感艺术图形程序或者是一些赏心悦目、多姿多彩的图像程序,所以许多人都对屏幕保护程序有不错的印象,或多或少都钟情于某类屏幕保护程序,让它在计算机“发呆”了一段时间后,自动开始运行。据说屏幕保护程序主要有两种功能:1.保护显示屏幕的荧光粉不会因为长时间显示移幅静态图像而被烧坏;2.隐藏屏幕上的敏感的信息。我觉得屏幕保护程序还有一个功能,就是它漂亮精美的画面可以美化电脑,很有欣赏价值。

   大家可能观察到屏幕保护程序的后缀名是.scr,那是什么文件格式啊?能产生这么美轮美奂的图形效果。呵呵,其实它就是.exe,只不过改了个后缀名罢了,系统能够自动识别,并当作.exe来执行。不过可不是任何.exe直接改了后缀名就可以当作屏保来用了,屏幕保护程序是一种特殊的WINDOWS程序,它必须按照一定的规则来编写才能做出真正的屏保程序。这里就来做个介绍。

   VC提供了一个支持屏幕保护的开发库scrnsave.lib,这个库已经定制了一个屏幕保护程序的框架结构,开发者只需要在完成相应的函数和提供相应的资源就可以了,它们是:

要实现的函数(已经在scrnsave.h中有声明了):

BOOL WINAPI ScreenSaverProc(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam);            // 屏幕保护程序的窗口函数,几乎所有的操作都在这里进行

BOOL WINAPI ScreenSaverConfigureDialog(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam);            // 屏幕保护设置对话框的窗口函数

BOOL WINAPI RegisterDialogClasses(
HANDLE hInst);             // 在这里注册特殊的屏幕保护设置对话框的窗口类

要准备的些资源(ID是预先定义在scrnsave.h中的,需要在resource.h中加入#include <scrnsave.h>和删除重复的ID):

DLG_SCRNSAVECONFIGURE      // 对话框资源
ID_APP                     // 程序图标资源
IDS_DESCRIPTION            // 程序描述字符串资源

   一般情况下,屏幕保护程序都依赖于定时机制来产生匀速的动画效果,典型的方法就是收到WM_CREATE消息的时候用SetTimer()函数创建一个定时器,在受到WM_DESTROY消息的时候用KillTimer()函数销毁定时器,而在每次收到WM_TIMER消息的时候进行绘图操作。通常情况下,我们必须把没有处理过的消息传递给缺省的屏幕保护窗口函数处理(实际上处理过的消息传递给它也无妨)。

   对于屏幕保护设置对话框窗口函数,则像一般的窗口函数一样的处理,只不过对话框资源ID必须使用scrnsave.h中预先定义好的ID号。

   还有,在RegisterDialogClasses()函数中,你可以根据你设计的屏保设置对话框的需要,注册特殊的窗口类,比如说,你的对话框包含了comctl32的控件,你就需要在这里使用函数InitCommonControls()注册这些控件的窗口类。

   另外,有一点小小的技巧:在VC的Project->Settings->Link选项卡中可以设置输出的文件名,你可以将输出的文件名的后缀改为.scr,使它直接输出屏幕保护程序文件,而不必每次都费力地去改名。

   最后,如果还有什么不明白的地方,可以参考我制作的屏幕保护程序:深海生物 的源代码(可以在“作品一览”栏目中下载软件和源代码)。剩下的,就是你来发挥自己的想象力,编制出漂亮的屏幕保护程序了。

你可能感兴趣的:(windows,框架,生物,vc++)