背景图片算是添加到资源中了,下面修改程序。关掉资源管理选项卡,找到刚才发现的添加默认显示图片的代码,即ScreenSaverForm.cs文件中的LoadDefaultBackgroundImages()函数。只需要将我们改动的图片加入,同时删除原有的两句加载背景图片的代码,最后LoadDefaultBackgroundImages()中的代码如下:
backgroundImages.Add(Properties.Resources.green);
backgroundImages.Add(Properties.Resources.blue);
backgroundImages.Add(Properties.Resources.yellow);
要更改背景图片变化的间隔时间可以在ScreenSaverForm.cs设计视图中,单击backgroundChangeTimer在属性窗口中,更改Interval属性,默认的是10000即10秒钟。
二 显示天气预报
在原例程中建议使用的气象服务是美国的,而且使用的是访问Web服务的方式。这里笔者使用另外一种方式来实现——抓取网页并从中提取需要的信息。C#是面向对象的语言,所有的代码必须属于一个类,所有的功能都使用对象来完成。本例将使用一个Weather类来实现抓取页面显示天气的功能,虽然Weather类完成的不仅是UI的功能,但是笔者还是趋向于把所有涉及到用户界面的类都放到UI命名空间里面。在解决方案管器中的UI文件夹(也可以叫命名空间)上点击右键,选择“添加”,“新建项”,选择“类”,命名为“Weather”,点击确定,建立了Weather.cs文件。详细代码如下:
class Weather
{
//用于存储天气图片的List
private List<Image> wImage;
//存储图片名的字符串
private string wiString;
//城市名
private string city;
//天气详细信息
private string weatherDetail;
//温度
private string lapse;
//风速
private string wind;
//日期
private string date;
//字体
private Font font;
//画刷
private static Brush brush = Brushes.Black;
//显示天气的区域的左上角的点
private Point wPoint;
//实现读取/设置属性的两个函数
public Point WPoint { get { return wPoint; } set { wPoint = value; } }
public Font Font { get { return font; } set { font = value; } }
//初始化函数,这里只需要定义图片List就可以了
public Weather ()
{
wImage = new List<Image>();
}
//这个函数访问天气预报的网页
public void GetUrl()
{
WebClient ScreenWeather = new WebClient();
//这就是要抓取的现实天气信息的网页,可以直接通过IE访问
string url = "http://www.nmc.gov.cn/homeweather.php";
using ( Stream WeatherStream = ScreenWeather.OpenRead( url ) )
{
//对数据流进行编码,要不然读出来的可能是乱码
StreamReader wsr = new StreamReader( WeatherStream,Encoding.GetEncoding("GB2312") );
string ws = wsr.ReadToEnd();
//在一大堆HTML代码中查找需要的信息
ws = ws.Substring( ws.IndexOf( "city" ) + 9 );
city = ws.Substring( 0, ws.IndexOf( "<" ) );
ws = ws.Substring( ws.IndexOf( "weather" ) + 9 );
weatherDetail = ws.Substring( 0, ws.IndexOf( "<" ) );
Stream imgStream;
int i = 0;
|