龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VB开发 >

为VB窗口增添平铺贴图背景

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
“平铺贴图”是Windows壁纸一种经常使用的形式。只要在Windows桌面设置程序中,选择一个Windows自带的图案,或者选择一个自己制作的位图文件并选定“平铺”选项,系统就会将你选择的
“平铺贴图”是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的窗口内就出现了一个平铺贴图背景。->

精彩图集

赞助商链接