暮鼓集 行走集
1.引言
屏幕保护程序(Screen Saver)的历史几乎与视窗操作系统的历史一样悠久,设计它的目的是为了保护CRT显示器使其的使用寿命更长。但随着技术的进步,新型的CRT显示器及液晶显示器已经无须这样做了,不过屏幕保护程序并未消失,因为其绚丽的画面成了人们彰显个性的方式。
现在,逼真的水族箱,浩瀚的太空以及更吸引眼球的屏幕保护程序不段被开发出来。
如果你有兴趣开发自己的屏幕保护程序,并且具有Windows程序的开发经验,请深入阅读本文,本文将提供使用Win32 Platform SDK开发屏幕保护程序的指引及范例。
2.屏幕保护程序是一种应用程序
屏幕保护程序虽然变化多端,但对开发者而言,它仍然是一种Windows应用程序,虽然屏幕保护程序的扩展文件名是scr,但在文件格式上与exe可执行文件是完全一样的。
那么,是不是只要是Windows应用程序都可以作为屏幕保护程序呢?
我们做个一个实验,将Windows自带的“扫雷”程序文件winmine.exe改成winmine.scr,接着我们打开显示器设定,选择屏幕保护程序选项卡,可以发现winmine.scr已经被当成一个屏幕保护程序出现在列表里。我们选中它,看看发生了甚么--扫雷程序运行起来了!但是,随后无论我们如何摆弄键盘和鼠标,程序不会象其他屏幕保护程序那样自动关闭。
所以,虽然屏幕保护程序一种应用程序,但是它与普通应用程序在人机界面上有所不同,我们可以归纳出以下几点特征:
操作系统自动运行程序 全屏幕的窗口 用户输入即退出 因此,只要我们在一个应用程序中实现这些特征,那么这个应用程序即可做为屏幕保护程序。
3.实现屏幕保护程序的基本特征
3.1 操作系统自动运行程序
这实际上由系统完成,只要用户将程序设定为系统的屏幕保护程序,那么当用户没有输入一段时间后,系统就会自动调用这个程序。因此,这不需要开发者操心。
3.2. 创建全屏幕的窗口
我们在创建Window时设置其坐标及长宽参数即可实现这个目的:
CreateWindow( WNDCLASS_SSFRAME,
NULL,
WS_POPUP|WS_VISIBLE,
0,
0,
GetSystemMetrics( SM_CXSCREEN ),
GetSystemMetrics( SM_CYSCREEN ),
HWND_DESKTOP,
NULL,
hInst,
NULL);
注意,在这里函数参数中的父窗口句柄传入的是HWND_DESKTOP。
3.3. 用户输入即退出
用户输入的主要途径是通过键盘或鼠标,在Windows系统中,当键盘或鼠标事件发生时,系统会产生一系列的消息通知