“平鋪貼圖”是Windows壁紙一種經常使用的形式。只要在Windows桌面設置程序中,選擇一個Windows自帶的圖案,或者選擇一個自己制作的位圖文件並選定“平鋪”選項,系統就會將你選擇的圖案或位圖有規則地從左到右、從上到下鋪滿整個屏幕。其實,通過調用API函數BitBlt,便可輕松自如地為VB應用程序的窗口制作平鋪貼圖背景。
BitBlt函數的作用是將位圖從一個設備描述表拷貝到另一個與之兼容的設備描述表,它的語法是:BitBlt(ByValhDestDC,ByValX,ByValY,ByValnWidth,ByValnHeight,ByValhSrcDC,ByValXSrc,ByValYSrc,ByValdwRop&)。其中,參數hDestDC指定目標設備描述表;X和Y指定目標設備描述表中目標矩形左上角的邏輯坐標點;nWidth和nHeight定義被拷貝的矩形圖像的寬度和高度;hSrcDC指定目標設備描述表;XSrc和YSrc指定源設備描述表中源矩形左上角的邏輯坐標點;dwRop定義拷貝過程中使用的光柵操作。VB中的Form和PictureBox對象,都有各自相應的設備描述表用於存放它們顯示的位圖,這些設備描述表可以通過hDC屬性存取。由此,我們可以總結出平鋪貼圖的實現方法:首先,將貼圖圖案載入一個PictureBox控件的設備描述表,然後,使用BitBlt函數將該設備描述表中的位圖重復復制到同一設備描述表中,在復制過程中,通過改變BitBlt函數的X和Y參數控制復制的位置,使位圖從左至右從上到下無縫排列,直到設備描述表中的位圖尺寸與顯示屏幕大小相同為止,最後,將該位圖裝入Form中顯示,就可使該Form具有平鋪貼圖背景了。下面讓我們使用該方法來完成一個實例。
新建一個VB項目,在缺省窗體Form1中加入一個PictureBox控件Picture1,插入一個模塊Module1,在其中加入如下聲明語句:
DeclareFunctionBitBltLib"GDI"(ByValhDestDCAsInteger,ByValXAsInteger,ByValYAsInteger,ByValnWidthAsInteger,ByValnHeightAsInteger,ByValhSrcDCAsInteger,ByValXSrcAsInteger,ByValYSrcAsInteger,ByValdwRopAsLong)AsInteger
PublicConstSRCCOPY=&HCC0020
在項目中加入下列代碼:
PrivateSubForm—Load()
DimhDCPicAsLong
DimXPosAsInteger
DimYPosAsInteger
DimRetAsInteger
DimHeightMaxAsInteger
DimWidthMaxAsInteger
DimWidthPicAsInteger
DimHeightPicAsInteger
'將位圖載入Picture1的設備描述表
Picture1.ScaleMode=3
Picture1.Visible=False
Picture1.AutoSize=True
Picture1.AutoRedraw=True
'在此選擇貼圖的圖案文件
Picture1.Picture=LoadPicture("tile.bmp")
'初始化變量
HeightMax=Screen.HeightScreen.TwipsPerPixelY
WidthMax=Screen.WidthScreen.TwipsPerPixelX
WidthPic=Picture1.ScaleWidth
HeightPic=Picture1.ScaleHeight
'初始化Picture1的設備描述表以接受平鋪貼圖
Picture1.AutoSize=False
Picture1.Height=Screen.Height
Picture1.Width=Screen.Width
hDCPic=Picture1.hDC
'水平拷貝位圖生成平鋪貼圖的第一行
ForXPos=0ToWidthMaxStepWidthPic
Ret=BitBlt(hDCPic,XPos,0,WidthPic,HeightPic,hDCPic,0,0,SRCCOPY)
Next
'垂直拷貝已生成的第一行直至生成整個平鋪貼圖
ForYPos=HeightPicToHeightMaxStepHeightPic
Ret=BitBlt(hDCPic,0,YPos,WidthMax,HeightPic,hDCPic,0,0,SRCCOPY)
Next
'將Picture1中的位圖裝入Form顯示,然後清除Picture1中的位圖
Me.Picture=Picture1.Image
Picture1.Picture=LoadPicture("")
Picture1.AutoRedraw=False
EndSub
按F5運行,Form1的窗口內就出現了一個平鋪貼圖背景。->