我自已做一个图片控件我需要我的控件背景透明。也就是说,将一副蓝底白字的图片赋给我的图片控件后,要求我的图片控件只显示白字不显示蓝底,这样就不会把窗体上的背景给挡住。首先我想用控件本身的透明属性
用UserControl.BackStyle = 0这个属性,背景是透明了。
但是
    UserControl.MaskColor = RGB(0, 0, 255)
    UserControl.MaskPicture = FPic.Picture 之后
显示的图片却成了黑白的了。没有办法我又想,能不能先把控件在窗体上的所在的背景图先截取下来放到控件里面做背景,然后再把赋过来的图片蓝底去掉。这样不就是透明了么。然后我用写了这个函数:
Public Sub ActiveLoad(DstDC As Long, DscX As Integer, DscY As Integer, DscW As Integer, DscH As Integer)Dim ObjDC As Long                    '外部获取的图片,为黑底白字
Dim BMP As Picture
Dim i As Integer
Dim TmpDC As Long, hAA As Long, hBB As Long         TmpDC = CreateCompatibleDC(DstDC)          
  hAA = CreateCompatibleBitmap(DstDC, DscW, DscH)
  hBB = SelectObject(TmpDC, hAA)
  ObjDC = CreateCompatibleDC(0)
  Set BMP = LoadPicture(App.Path + "\111.bmp")
  SelectObject ObjDC, BMP
  For i = 1 To 2
    BitBlt hdc, 0, 0, 400, 400, ObjDC, 0, 0, vbSrcAnd      
    BitBlt hdc, 0, 0, DscW, DscH, TmpDC, DscX, DscY, vbSrcInvert
  Next i
  hAA = SelectObject(TmpDC, hBB)
  DeleteObject hBB
  DeleteObject hAA
  DeleteDC TmpDC
  DeleteDC ObjDC
End Sub说明:
DstDC 窗体传送给控件的句柄
DscX 窗体的LEFT
DscY 窗体的TOP 
DscW 窗体的高 
DscH 窗体的宽结果,背景还是没贴上去。我单独取背景:
  BitBlt UserControl.hdc, 0, 0, DscW, DscH, DstDC, 0, 0, vbSrcCopy
  时,发现,它把窗体看得见部分全部拷贝下来了,但是我需要的是被控件本身挡住的背景。请问各位,有什么办法可以解决么?

解决方案 »

  1.   

    BitBlt UserControl.hdc, 0, 0, DscW, DscH, DstDC, 0, 0, vbSrcCopy
    中DscW, DscH,的值是不是太多了,而把窗体的全部都拷下来了?你用
    lngR = BitBlt( UserControl.hdc, 0, 0, DscW, DscH, DstDC, 0, 0, vbSrcCopy)
    看一下lngR返回复制行的值是多少。你的这段代码调试一下,让BitBlt返回结果值看看怎么样?
    For i = 1 To 2
        BitBlt hdc, 0, 0, 400, 400, ObjDC, 0, 0, vbSrcAnd      
        BitBlt hdc, 0, 0, DscW, DscH, TmpDC, DscX, DscY, vbSrcInvert
      Next i
      

  2.   

    lngR返回值为1那段循环代码把外部图贴上来了。而且也去掉了背景,但是控件背景还是没变。
      

  3.   

    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
    up
      

  4.   

    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
    upupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupupup
      

  5.   

    在VB编程中实现图片背景透明效果
     
    (2002-11-15 18:46:07)
     
    VB6直接支持图标和光标文件的背景透明,要想在窗体中放置一个背景透明而且是面积较大的图片时可以用API,当然也可以借助第三方控件来完成。笔者在这里就再介绍另一种方法——掩模覆盖法。
    1、实现的原理
    掩模覆盖法的原理:先对图片进行加工,保留图片的主体部分,需要透明掉的部分全部描为纯黑色生成源图片,再为这幅源图片制作一幅掩模图,就是将源图片主体部分描成纯黑色而需要透明的部分都描成纯白色。程序运行时将两幅图片在同一位置按不同方法显示在窗体或图片框上,就会显现出一幅背景透明的图片。
    2、实现的代码
    新建一标准EXE工程,在默认窗体Form1上放置两个图像框控件Image1和Image2,分别加载制作完成的掩码图和源图,两个图像框的其他属性均可取默认值。
    程序代码如下:
    PrivateSubForm_Load()
    DimTU1,TU2AsPicture'定义TU1和TU2为图片对象
    DimX0=0:Y0=0asInteger
    Image1.Visible=False:SetTU1=Image1
    Image2.Visible=False:SetTU2=Image2
    AutoRedraw=True
    Form1.PaintPictureTU1,x0,y0,,,,,,,&&H8800C6
    Form1.PaintPictureTU2,x0,y0,,,,,,,&&H660046
    EndSub
    上述方法同样适用于在图片框内放置背景透明的图片。
    掩模覆盖法优点是不需要附加任何外接控件,缺点是需要为每幅源图分别制作掩模图,工作量较大。**********************************************
    原理在上面说清楚了,你需要在程序中根据需要自己生成mask图片