自助屏保餐屏保是什么?就是在屏幕长时间空闲时显示一些活动的画面,避免显示器局部长时间受辉光照耀,至于显示一些什么东西,就让你自由发挥了。 可是,在那里值得显示些什么东西呢?难道你有呆呆地看屏保的习惯?那还不如去看 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 |