“平铺贴图”是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.Height\Screen.TwipsPerPixelY
WidthMax=Screen.Width\Screen.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的窗口内就出现了一个平铺贴图背景。->