简单的部分透明比较难做,不过可以换个方式考虑一下.
大致思路如下:
①将backgroundimage设成一个位图(点阵图)
PS:一下代码是复制的,因为Google一下就有
'添加新模块:
Option Explicit
'透明接口调用
Alias "SetwindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) _
As Long
Alias "GetwindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long) _
ByVal crKey As Long, _
ByVal bAlpha As Long, _
ByVal dwFlags As Long) _
'设置窗口透明度
Public Sub SetFormToAlpha(hwnd As Long, lngAlpha As Long)
Dim tmpLog As Long
If hwnd = 0 Then Exit Sub
tmpLog = GetwindowLong(hwnd, GWL_EXSTYLE) '窗口属性
Call SetwindowLong(hwnd, GWL_EXSTYLE, tmpLog or WS_EX_LAYERED)
Call SetLayeredwindowAttributes(hwnd, 0, lngAlpha, LWA_ALPHA)
End If
End Sub
先建一个标准EXE工程,然后添加一个用户控件,把以下代码复制到控件代码中,再把此控件放置到Form1上.
[vb]?view plain?copy
Option?Explicit
Private?Type?POINTAPI
X?As?Long
Y?As?Long
End?Type
Private?Type?RECT
Left?As?Long
Top?As?Long
Right?As?Long
Bottom?As?Long
Private?Const?DT_CENTER?=?H1
Private?Const?SW_HIDE?=?0
Dim?m_hMemDC?As?Long
Dim?m_hMemBmp?As?Long,?m_hMemBmpPrev?As?Long
Dim?m_rcControl?As?RECT
Private?Sub?UserControl_Initialize()
UserControl.AutoRedraw?=?True
UserControl.BackColor?=?vbRed
m_hMemDC?=?CreateCompatibleDC(UserControl.hdc)
End?Sub
Private?Sub?UserControl_Terminate()
If?m_hMemBmp?0?Then
DeleteObject?SelectObject(m_hMemDC,?m_hMemBmpPrev)
End?If
DeleteDC?m_hMemDC
Public?Sub?Translucence()
Dim?hdc?As?Long
Dim?tPt?As?POINTAPI
'获得控件当前位置和大小
ClientToScreen?UserControl.hwnd,?tPt
ScreenToClient?UserControl.ContainerHwnd,?tPt
Call?GetClientRect(UserControl.hwnd,?m_rcControl)
OffsetRect?m_rcControl,?tPt.X,?tPt.Y
'创建一幅内存位图
DeleteObject?(SelectObject(m_hMemDC,?m_hMemBmpPrev))
m_hMemBmp?=?CreateCompatibleBitmap(UserControl.hdc,?m_rcControl.Right,?m_rcControl.Bottom)
m_hMemBmpPrev?=?SelectObject(m_hMemDC,?m_hMemBmp)
'隐藏控件
ShowWindow?UserControl.hwnd,?SW_HIDE
DoEvents
'保存控件容器的图像到内存位图中
Dim?hDesktopDC?As?Long
hDesktopDC?=?GetDC(UserControl.hwnd)
BitBlt?m_hMemDC,?0,?0,?m_rcControl.Right,?m_rcControl.Bottom,?hDesktopDC,?0,?0,?vbSrcCopy
ReleaseDC?0,?hDesktopDC
'通过alpha效果进行半透明渲染
UserControl.AutoRedraw?=?False
'显示控件
ShowWindow?UserControl.hwnd,?SW_SHOW
'将渲染后的结果复制到控件中
BitBlt?UserControl.hdc,?0,?0,?m_rcControl.Right,?m_rcControl.Bottom,?m_hMemDC,?0,?0,?vbSrcCopy
Private?Sub?UserControl_Paint()
在Form1的Form_Activate事件里输入以下代码:
Private?Sub?Form_Activate()
Me.UserControl11.Translucence
最后,你将看到一个粉红色半透明的方块,该方块就是你所需要的半透明的控件.至于控件的其它功能,可以自行扩展.
Private Const LWA_COLORKEY = H1
Private Sub SetFormTranslucency(hwnd As Long, crKey As Long, bAlpha As Byte, dwFlags As Long)'实现半透明窗体
Dim rtn As Long
rtn = GetWindowLong(hwnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes hwnd, crKey, bAlpha, dwFlags
Private Sub Form_Load()
可以实现窗体和窗体上的控件全都半透明,透明度可调
以上就是土嘎嘎小编为大家整理的vb.net窗体半透明相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!