大家好。記得以前玩過一些桌面寵物類的小游戲,比如說:一只小貓在桌面上不停的追逐鼠標等等。當時我剛開始學Windows的編程,曾經對這類程序為什麼能在桌面上直接作動畫感到百思不得其解。下面我們就來談談制作桌面動畫的原理。其實說穿了很簡單:就是先准備幾張連續的圖片,然後在桌面上建一個形狀不規則的窗口(窗口具體是什麼形狀要由顯示什麼樣的動畫來決定),然後一邊移動窗口,一邊給窗口更換圖片就行了。是不是很簡單。下面就用BCB來做一個例子:
打開BCB,新建一個標准工程。
在Form1中添加一個名為Timer1的Timer控件。
在Unit1.h中添加以下代碼:
#include "winuser.h"
#include "wingdi.h"
然後在Form1的OnCreate事件中添加以下代碼:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
BorderStyle=bsNone;
Timer1->Enabled=false;
Timer1->Interval=150;
SetWindowRgn(Form1->Handle,CreateEllipticRgn(0,0,80,80),true);//做一個圓形的窗口
}
在Form1的OnPaint事件中添加以下代碼:
void __fastcall TForm1::FormPaint(TObject *Sender)
{
Canvas->Pen->Width=1;
Canvas->Pen->Style=psSolid;
Canvas->Pen->Color=clRed;
Canvas->Brush->Color=clRed;
Canvas->Ellipse(0,0,79,79);//在窗口中畫一個圓形
}
在Form1的OnMouseDown事件中添加以下代碼:
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Button==mbLeft)//點鼠標左鍵就開始移動
Timer1->Enabled=true;
if(Button==mbRight)//點鼠標右鍵就退出
Close();
}
在Timer1的OnTimer事件中添加以下代碼:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(Form1->Top>=1)
Form1->Top=Form1->Top-2;
else
Timer1->Enabled=false;
}
現在保存並編譯它,然後執行,你就會看到一個圓形在桌面上向上移動。這裡因為篇幅所限,所以給出的例子比較簡單。不過桌面動畫的實現原理已經說的很清楚了。
以上程序在BCB3.0+Win97中編譯通過。