和我一起写屏保
作者:Alon

下载本文配套代码1:示例工程
下载本文配套代码2:黑客帝国屏保

对于屏幕保护程序,大家应该不会陌生。屏幕保护程序的后缀名是.scr,其实它就是一个可执行的.exe文件。
VC
提供了一个支持屏幕保护的开发库scrnsave.lib,这个库已经定制了一个屏幕保护程序的框架结构,开发者只需要在完成相应的函数和提供相应的资源就可以写出自己的屏幕保护程序。
我们所需要完成的函数有:
//
屏幕保护程序的窗口函数,几乎所有的操作都在这里进行

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

好了,介绍了以上的内容,接下来我们就写一个最简单的屏幕保护程序:黑屏
跟着我,一步一步做吧。

首先,我们打开VC,建立一个Win32 Application 的工程。工程的名字就叫做SimpleScr好了。
接下来,向工程中加入一个对话框资源。(这个对话框当我们在桌面的属性中设置屏保时,点击设置时会看到)步骤如下:
1.
选择菜单 插入->资源类型 出现对话框,在对话框中选择 “Dialog”资源 然后 新建。
2.
保存资源 文件->保存 出现另存为对话框,在对话框中写入要保存的文件的名称:
SimpleScr.rc

3.
SimpleScr.rc 文件 resource.h 文件添加到工程中。
4.
将对话框的ID改为: DLG_SCRNSAVECONFIGURE
5.
编辑我们的对话框,在对话框中加入版本信息了什么的,自由发挥了 :)
6.
打开resource.h 文件修改,加入代码:

#include <scrnsave.h>

并去掉编辑器自动加入的 #define DLG_SCRNSAVECONFIGURE 101 这一行
因为DLG_SCRNSAVECONFIGURE 已经在 scrnsave.h中定义过了。
现在我们就开始改写前面说过的scrnsave.lib中的函数了,步骤如下:
1.
向工程中加入文件SimpleScr.cpp , 文件的内容如下:

// 程序需要的头文件

#include <windows.h>

 

#pragma comment(lib,"scrnsave.lib") //使用库文件

#include "resource.h"

 

LRESULT CALLBACK ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

        switch (message)

        {

               case WM_PAINT:

                       {

                               PAINTSTRUCT ps;

                               HDC hDC = BeginPaint(hWnd, &ps);

                               SetBkMode(hDC, TRANSPARENT);

                               SetTextColor(hDC, RGB(0x33, 0xcc, 0));

                               TextOut(hDC, 150, 150, "WWW.VCKBASE.COM", 15);

                               EndPaint(hWnd, &ps);

                       }

                       break;

               case WM_DESTROY:

                       PostQuitMessage(0);

                       break;        

               default:

                       // 缺省的消息处理函数

                       return DefScreenSaverProc(hWnd,message,wParam,lParam);

        }

        return 0;

}

 

BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

        switch (message) {

 

        case WM_COMMAND:

               //处理 确定 按钮

        if (LOWORD(wParam) == IDOK) {

               EndDialog(hDlg, LOWORD(wParam));

                       return TRUE;

                                      }

               else

               {

               //系统的处理退出命令

                       EndDialog(hDlg, LOWORD(wParam));

                       return TRUE;

               }

 

               break;

        }

 

        return FALSE;

}

 

BOOL WINAPI RegisterDialogClasses(HANDLE hInst)

{

        return TRUE;

}

接下来,所需要做的就是保存文件,编译,还有就是将编译通过的文件后缀改为.scr 并将它拷贝到系统目录下看看运行结果了。