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