我想要一个.png图像作为vb6.0中表单的背景

时间:2016-09-11 08:00:06

标签: vb6 splash-screen

我正在vb6.0中制作启动画面,我已经设法使表单透明,但现在我想显示一个png图像作为表单的背景图片,所以我会得到正确的外观一个闪屏。

2 个答案:

答案 0 :(得分:1)

"启动画面" Windows 3.1失去了风格,之后很快就在严肃的软件中消失了。但你可以毫不费力地做这件事。

听起来你希望这个启动画面有一个"在它的洞里面#34; PNG是透明的,例如,您可能希望显示为不规则图像的无边框表格。您需要在背景色度键颜色上渲染PNG图像。

然而,由于OLE / ActiveX没有透明的PNG渲染支持,VB并没有提供直接的方法来实现这一点。您的选项包括GDI + Flat API或GDI +包装库(如WIA 2.0)。 WIA 2.0已经成为Windows的一部分了很长一段时间。它在Vista及更高版本中发布,曾经作为Windows XP SP1及更高版本的redist库提供。

这是一个使用WIA 2.0的简短示例,该帖子相当短。请注意,它假定Project引用了Microsoft Windows Image Acquisition Library 2.0 set:

Option Explicit

Private Declare Function GetWindowLong Lib "user32" _
    Alias "GetWindowLongW" ( _
    ByVal hWnd As Long, _
    ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
    Alias "SetWindowLongW" ( _
    ByVal hWnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" ( _
    ByVal hWnd As Long, _
    ByVal crKey As Long, _
    ByVal bAlpha As Byte, _
    ByVal dwFlags As Long) As Long
Private Const GWL_EXSTYLE = -20
Private Const WS_EX_LAYERED = &H80000
Private Const LWA_COLORKEY = &H1&

Private Sub Form_Load()
    Dim W As Long
    Dim H As Long
    Dim ScanWidth As Long
    Dim Backdrop() As Byte
    Dim Y As Long
    Dim X As Long
    Dim BackImgF As WIA.ImageFile

    'Set the Form "transparent by color."
    SetWindowLong hWnd, _
                  GWL_EXSTYLE, _
                  GetWindowLong(hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED
    SetLayeredWindowAttributes hWnd, RGB(0, 0, 1), 0, LWA_COLORKEY

    'Render PNG image into the Form with transparency.
    W = ScaleX(ScaleWidth, ScaleMode, vbPixels)
    H = ScaleY(ScaleHeight, ScaleMode, vbPixels)
    ScanWidth = ((3 * W + 3) \ 4) * 4
    ReDim Backdrop(ScanWidth * H - 1)
    For Y = 0 To H - 1
        For X = 0 To W - 1
            Backdrop(ScanWidth * Y + 3 * X) = 1 'RGB(0, 0, 1)
        Next
    Next
    With New WIA.Vector
        .BinaryData = Backdrop
        Set BackImgF = .ImageFile(W, H)
    End With
    With New WIA.ImageProcess
        .Filters.Add .FilterInfos!Stamp.FilterID
        With .Filters(1).Properties
            Set !ImageFile.Value = New WIA.ImageFile
            !ImageFile.Value.LoadFile "bg.png" 'Background PNG.
        End With
        Set Picture = .Apply(BackImgF).FileData.Picture
    End With
End Sub

如果您想从资源加载PNG,也可以这样做。

如果您必须支持Win2K或WinXP,甚至WinXP SP1或更高版本,但您没有或不想部署redist WIA 2.0库,那么您将需要第三方GDI +包装器。否则,您可以使用GDI + Flat API调用。这也是完全可行的,但更多的工作。

答案 1 :(得分:0)

我多年来一直在使用LaVolpe的AlphaImageControl,它支持PNG /光栅图像。下载文件和示例应用程序时,如果您使用的是Windows 7及更高版本,则需要使用regsvr32手动注册控件。然后,您需要在组件列表中传递对控件的引用,瞧,您有一个对vb6有魔力的控件。这些文件可以在vbForums - HERE

找到