透明窗体

goosen 2009-03-14 09:32:53
这段代码可以把整个窗体都透明了,包括了标题栏.和FORM1里面的控件也透明了.......
但标题栏,还是有蓝色的底色..我想把底色也去. 还有就是TEXTBOX文本框内的文件字能不能不透明

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 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
Dim rtn As Long

Private Sub Command1_Click()
MsgBox "ok"
End Sub

Private Sub Form_Load()
rtn = rtn Or WS_EX_LAYERED
SetWindowLong hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes hwnd, 0, 122, LWA_ALPHA
End Sub
'其中hwnd是透明窗体的句柄,crKey为颜色值,bAlpha是透明度,取值范围是[0,255]
'dwFlags是透明方式,可以取两个值:当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;
'当取值为LWA_COLORKEY时,bAlpha参数有效而窗体中的所有颜色为crKey的地方将变为透明--这个功能很有用
...全文
86 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
goosen 2009-03-17
  • 打赏
  • 举报
回复
用了个控件做...
东方之珠 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 goosen 的回复:]
http://hi.baidu.com/aganhanks/blog/item/83c678af4a09a1fdfbed50b5.html


就像这个一样的窗体....按照里面的代码调试出错...
[/Quote]


哪里面有2个Dwm开头的API函数是Vista特有的,当然不能在其它操作系统下使用了!
goosen 2009-03-17
  • 打赏
  • 举报
回复
设为0就不好看了。。。而且还要写代码移动窗体。。。又要做右上角的三个按扭 算了结了
Tiger_Zhao 2009-03-17
  • 打赏
  • 举报
回复
那个需要 Windows Vista。
其实不要标题栏很简单,窗体的 BorderSytle 设计为 0 - None 就可以了。
goosen 2009-03-16
  • 打赏
  • 举报
回复
http://hi.baidu.com/aganhanks/blog/item/83c678af4a09a1fdfbed50b5.html


就像这个一样的窗体....按照里面的代码调试出错...
goosen 2009-03-16
  • 打赏
  • 举报
回复
chenjl1031 TEXTBOX控件透明实现很好..就是窗体的标题栏没有透明..等待chenjl1031的回复
东方之珠 2009-03-16
  • 打赏
  • 举报
回复
'Option Explicit
Private Declare Function SetLayeredWindowAttributesByColor Lib "user32" Alias "SetLayeredWindowAttributes" (ByVal hwnd As Long, ByVal crey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32.dll" (ByVal crColor As Long) As Long
Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function GetClientRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long
Private Declare Function FillRect Lib "user32.dll" (ByVal hdc As Long, ByRef lpRect As RECT, ByVal hBrush As Long) As Long
Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long
Private Const GWL_EXSTYLE As Long = -20
Private Const WS_EX_LAYERED As Long = &H80000
Private Const LWA_COLORKEY As Long = &H1
Private Const LWA_ALPHA As Long = &H2

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type MARGINS

m_Left As Long

m_Right As Long

m_Top As Long

m_Button As Long

End Type

Public transparencyKey As Long

Private Sub Form_Load()
m_transparencyKey = RGB(0, 0, 0) '黑色

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

SetLayeredWindowAttributesByColor Me.hwnd, m_transparencyKey, 122, LWA_COLORKEY

Dim mg As MARGINS, en As Long

mg.m_Left = -1

mg.m_Button = -1

mg.m_Right = -1

mg.m_Top = -1

End Sub

Private Sub Form_Paint()
Dim hBrush As Long, m_Rect As RECT, hBrushOld As Long

hBrush = CreateSolidBrush(m_transparencyKey)

hBrushOld = SelectObject(Me.hdc, hBrush)

GetClientRect Me.hwnd, m_Rect

FillRect Me.hdc, m_Rect, hBrush

SelectObject Me.hdc, hBrushOld

DeleteObject hBrush

End Sub
goosen 2009-03-16
  • 打赏
  • 举报
回复
找个人接一下分

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧