vb 在控件中将一个不透明的图片显示成半透明

我想做的就是在一副图片上,我加了一个picture控件,控件的背景图片想弄成半透明的,玩过游戏的人都应该知道的,在显示对话的时候,那个对话框就是半透明的,我想要的就是那个... 我想做的就是在一副图片上,我加了一个picture控件,控件的背景图片想弄成半透明的,玩过游戏的人都应该知道的,在显示对话的时候,那个对话框就是半透明的,我想要的就是那个效果,求方法,谢谢
能达到一样效果的也行,但是不能占用太多内存哦,,先送上50分,写好再加50分
看到了,这个是窗体及其所有控件的半透明化代码,但是和我的要求完全不合啊,我想要的是对话框一样的半透明啊,我也是用于对话框的,
只能能达到同样的效果的代码也行啊,例如能能否用一个image控件加label控件实现呢,(在image中载入半透明背景的图片,然后再在label中输入对话就可以达到同样的效果)
效果图如下图
https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/zuiaishaxi/pic/item/46348f94fe129a05d21b7093.jpg
展开
 我来答
katar1024
2008-11-06 · TA获得超过942个赞
知道小有建树答主
回答量:511
采纳率:0%
帮助的人:530万
展开全部
用GDI+吧,或者OpenGL,最好使用DirectX
这些都是高速图形接口

当然如果只是单纯做界面,使用GDI+和PNG格式的图片完全可以办到
43295811
2008-11-05 · TA获得超过1529个赞
知道大有可为答主
回答量:1701
采纳率:0%
帮助的人:2043万
展开全部
Option Explicit
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 WS_EX_LAYERED = &H80000
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub Form_Load()
Show
Picture1.Move 0, 0
Picture1.AutoSize = True
Dim sty As Long
sty = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
sty = sty Or WS_EX_LAYERED
SetWindowLong Me.hwnd, GWL_EXSTYLE, sty
SetLayeredWindowAttributes Me.hwnd, 0, 125, LWA_ALPHA
End Sub

不完美,仅作参考!!

你要求的效果,我弄了半天,搞不定,期待高手吧!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mosquitokobe
2008-11-05 · TA获得超过4253个赞
知道大有可为答主
回答量:5008
采纳率:50%
帮助的人:0
展开全部
你新建个工程 2个窗体 1个模块 窗体一包含2个label 代码如下
Private Sub Form1_Load()
Load (Form2)

Form2.Hide
ShowForm = False
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Form2.Hide
ShowForm = False
End Sub

Private Sub Form_Unload(Cancel As Integer)
Unload Form2
Unload Me
End Sub

Private Sub subShow(ByVal Align As Integer, ByVal BackColor As OLE_COLOR)

If ShowForm Then Exit Sub

With Form2
.BackColor = BackColor
.Top = Me.Top
If Align Then
.Left = Me.Left + Me.Width
Else
.Left = Me.Left - .Width
End If
.Show
End With

ShowForm = True

End Sub

Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Call subShow(0, vbWhite)

End Sub

Private Sub Label2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Call subShow(1, 255)
End Sub

'窗体2代码
Private Sub Form_Load()
Dim rtn As Long

rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn

SetLayeredWindowAttributes Me.hwnd, 0, 192, LWA_ALPHA

End Sub
'模块代码
Option Explicit
Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Public Const WS_EX_LAYERED = &H80000
Public Const GWL_EXSTYLE = (-20)
Public Const LWA_ALPHA = &H2
Public Const LWA_COLORKEY = &H1
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Dim ShowForm As Boolean
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友32cdd9945
2008-11-06 · TA获得超过1374个赞
知道大有可为答主
回答量:2429
采纳率:100%
帮助的人:1929万
展开全部
好像没有什么好的办法,只能自己结合背景颜色一个像素一个像素的计算图形的颜色。
GDI+里面好像也有函数,你自己找找看,有没有方便一点的办法。

人家游戏是使用DirectX 来做的,那种实现半透明效果很容易的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式