曾見過這樣一種屏幕保護程序:靜止的屏幕突然整屏上下或左右翻滾起來,這種奇特的屏幕保護效果是如何制造出來的?當我告訴你其中奧妙之後,你也可以利用VB來輕松地“編”出這種效果。下面以上下滾屏為例,說明實現的過程(限於篇幅,這裡只給出可直接實現的程序,關於屏幕保護程序的編寫暫不討論):
實現效果一:畫面在漆黑的背景屏幕裡滾動,其思路是將整屏畫面抓到一個窗體內,而將另一個窗體的背景置黑,首先創建兩個窗體forml和form2,置AutoRedraw屬性為True,BorderStyle屬性為None(無邊框),將form2的Backcolor置為黑色。在forml中編制程序如下:
DimScreenhWnd%,ScreenDC%,rc%
′WindowsAPI函數
DeclareFunctionBitBlt%Lib"GDI"(ByValhDestDC%,ByValdx%,ByValdy%,ByValnWidth%,ByValnHeight%,ByValhSrcDC%,ByValsx%,ByValsy%,ByValdwRop&)
DeclareFunctionGetDesktopWindow%Lib"USER"()
DeclareFunctionGetDC%Lib"USER"(ByValhWnd%)
DeclareFunctionReleaseDC%Lib"USER"(ByValhWnd%,ByValhDC%)
SubForm-Load
′form1窗體大小、位置與屏幕重合
form1Width=ScreenWidth
form1Height=ScreenHeight
form1left=0
form1top=0
′form2窗體大小、位置與屏幕重合
form2Width=ScreenWidth
form2Height=ScreenHeight
form2left=0
form2top=0
′將整屏畫面抓到form1中
ScreenhWnd%=GetDesktopWindow%()
ScreenDC%=GetDC%(ScreenhWnd%)
rc%=BitBlt%(form1hDC,0,0,form1ScaleWidth,form1ScaleHeight,
ScreenDC%,0,0,&HCC0020)
rc%=ReleaseDC%(ScreenhWnd%,ScreenDC%)
′顯示form1和form2
form2Show
form1Show
′上下移動form1
WhileTrue
form1Top=form1Top+500
′500為移動速度
ifform1Top>ScreenHenghtThen
′超出屏幕下界時回到最上面
form1Top=-ScreenHeight
Endif
DoEvents′響應其它事件
Wend
EndSub
′點擊鼠標結束滾幕
SubForm-MouseDown()
End
EndSub
實現效果二:整屏畫面連續不斷地翻滾。最簡單的一個思路是將整屏畫面抓到兩個一樣的窗體中交替連續地滾動出現,在上述程序的基礎上修改如下:
form2Top=-ScreenHenght
′將form2緊接form1的頂部放置
rc%=BitBlt%(form2hDC,0,0,form2ScaleWidth,form2ScaleHeight,ScreenDC%,0,0,&HCC0020)
′增加此句,將整屏抓到form2中
WhileTrue
form2Top=form2Top+500
Ifform2Top<0Then
form1Top=form2Top+ScreenHeight
′form1在form2下面
Else
form1Top=form2Top-ScreenHeight
′form1在form2上面
EndIf
Ifform2Top>ScreenHeightThen
form2Top=-ScreeenHeight
′form2超出下界時回到最上面
Eenif
DoEvents
Wend->