自助屏保餐屏保是什么?就是在屏幕长时间空闲时显示一些活动的画面,避免显示器局部长时间受辉光照耀,至于显示一些什么东西,就让你自由发挥了。 可是,在那里值得显示些什么东西呢?难道你有呆呆地看屏保的习惯?那还不如去看 MPEG呢。 况且我又不上电视,没必要放一个屏保在身后,对着镜头侃侃而谈。 所以,我从来都是设定“黑屏”为我的屏幕保护程序。 但是,有时我出去逛了一圈,回来后我希望能知道我是什么时候出去的,所以很想屏幕保护程序能记录下时间。 很简单!利用SCRNSAVE.LIB,你只要搭一个框架,再填写显示输出模块,具体的消息控制就交给它了。我用的是Visual Studio 6.0,在VC98\LIB目录下面有,希望你也能找到。 先看看WIN32的屏保机制:在规定时间内没有键盘和鼠标输入,则产生 wParam= =SC_SCREENSAVE的WM_SYSCOMMAND消息。如果该消息没有被当前活动程序截获(放VCD软件就是这样阻止屏保的运行,此是后话),那么DefWindowProc将按照 SYSTEM.INI的[boot]区的描述来执行屏幕保护程序。通过SCRNSAVE.LIB,你的程序ScreenSaverProc将接收到的消息有:
好了,打开VC吧,我们来开始干活。注意看蓝色的注释。 第一步,选择New--Project,用Win32 Application。输入名字,下一步选择“A typical helloworld application.” 其他都缺省了。 第二步,把下面程序拷贝过去,覆盖掉原来的MySaver.CPP。
#include "stdafx.h"
#include < windows.h>
#include < scrnsave.h>
#include < time.h>
#include "resource.h"
LRESULT WINAPI ScreenSaverProc(HWND, UINT, WPARAM, LPARAM);
BOOL WINAPI ScreenSaverConfigureDialog(HWND, UINT, WPARAM, LPARAM);
BOOL WINAPI RegisterDialogClasses(HANDLE );
//*/
LRESULT WINAPI ScreenSaverProc(HWND hWnd,
UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDC; RECT rc;
static int xpos; //横坐标
static int ypos; //纵坐标
static char SlideText[] = "我喜欢独裁,不让你碰我的计算机。";
static UINT Timer; //定时器
static char tmpbuf[32];
switch (message)
{
case WM_CREATE: //初始化
xpos = 0;
Timer = SetTimer(hWnd, 1, 500, NULL); //0.5秒动作一次。
_strtime( tmpbuf );
tmpbuf[8] = '-';
break;
case WM_ERASEBKGND:
break; //留给DefScreenSaveProc处理
case WM_TIMER: //动画显示的效果就在这里。
hDC = GetDC( hWnd );
GetClientRect( hWnd, &rc );
FillRect( hDC, &rc, (HBRUSH) GetStockObject(BLACK_BRUSH) ); //输出文本
SetTextColor( hDC, RGB( 255*rand(), 255*rand(), 255*rand() ) );
SetBkColor( hDC, RGB( 0,0,0 ) );
TextOut( hDC, xpos - strlen(SlideText)*8, ypos,
SlideText, strlen(SlideText) ); //移动文本1的横坐标.
_strtime( tmpbuf+9 );
TextOut( hDC, GetSystemMetrics(SM_CXSCREEN) - xpos, ypos,
tmpbuf, strlen(tmpbuf) ); //移动文本2的横坐标.
xpos = ( xpos + 10 ) % ( GetSystemMetrics(SM_CXSCREEN)
+ strlen(SlideText)*8 );
ypos = ( ypos + 10 ) % GetSystemMetrics(SM_CYSCREEN);
ReleaseDC( hWnd, hDC );
break;
case WM_DESTROY:
KillTimer( hWnd, Timer );
PostQuitMessage( 0 );
return 0;
}
return DefScreenSaverProc( hWnd, message, wParam, lParam);
//剩下的消息由此处理.
}
BOOL WINAPI ScreenSaverConfigureDialog(HWND HwND,
UINT message, WPARAM wParam, LPARAM lParam)
{ //暂时不配置对话框,可自行添加.
return FALSE;
}
BOOL WINAPI RegisterDialogClasses (HANDLE hInstance)
{ //一般不需要.
return TRUE;
}
第三步,画出一个图标MySaver.ico,其ID为ID_APP。在String Table中加入ID为
IDS_DESCRIPTION,Captain为MySaver的字符串。第四,在Project菜单的Setting—Link中加入SCRNSAVE.LIB,编译。 最后,把生成的MySaver.EXE改名成MySaver.SCR,就可以执行了。拷到Windows目录,在显示器的屏保就可以选择它。 显示的结果?两个时间:起始时间和当前时间,在屏幕上不断走动。如果你懒得做一遍, 拷下来好了! 最后,提醒一句:屏保不光可以保护显示器,还可以保护你的计算机不被别人乱动。加个好口令非常应该。把它放到“开始” (Start...) 的菜单里,暂时离开计算机时执行它,是很必要的。 |
| Copyright 1998-2002 Fadshop.net, Inc. All rights reserved. jhj123@163.net |