求助!怎样使得frame的背景变透明?vb6.0中

kokojin 2008-06-04 11:53:34
我想在vb6.0中把frame框的背景变透明,属性里似乎没有,请问代码怎么写?
谢谢
...全文
3352 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
WY00703 2010-11-08
  • 打赏
  • 举报
回复
顶一个
danielinbiti 2008-06-22
  • 打赏
  • 举报
回复
最简单的就是CTRL+T引入Microsoft forms 2.0 object library
无·法 2008-06-06
  • 打赏
  • 举报
回复
yangzn76 的很好
yangzn76 2008-06-06
  • 打赏
  • 举报
回复
总觉得用这个也可行的,不过就是没试出来.
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)

sub a
Dim oldSytle As Long
'oldSytle = GetWindowLong(hWnd, GWL_STYLE)
SetWindowLong hWnd, GWL_STYLE, _
GetWindowLong(hWnd, GWL_STYLE) _
Or WS_BORDER Or WS_EX_TRANSPARENT Or WS_EX_STATICEDGE
end sub

yangzn76 2008-06-06
  • 打赏
  • 举报
回复
网上找了一个。

Option Explicit
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal HwndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As String) As Long
Private Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As String) As Long
Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long
Private Declare Function RegisterClassEx Lib "user32" Alias "RegisterClassExA" (pcWndClassEx As WNDCLASSEX) As Integer
Private Declare Function ShowWindow Lib "user32" (ByVal lhwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function UpdateWindow Lib "user32" (ByVal lhwnd As Long) As Long
Private Declare Function SetFocus Lib "user32" (ByVal lhwnd As Long) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal lhwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal lhwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As MSG, ByVal lhwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long) As Long
Private Declare Function TranslateMessage Lib "user32" (lpMsg As MSG) As Long
Private Declare Function DispatchMessage Lib "user32" Alias "DispatchMessageA" (lpMsg As MSG) As Long
Private Declare Sub PostQuitMessage Lib "user32" (ByVal nExitCode As Long)
Private Declare Function BeginPaint Lib "user32" (ByVal lhwnd As Long, lpPaint As PAINTSTRUCT) As Long
Private Declare Function EndPaint Lib "user32" (ByVal lhwnd As Long, lpPaint As PAINTSTRUCT) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal lhwnd As Long, lpRect As RECT) As Long
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

Private Type WNDCLASSEX
cbSize As Long
style As Long
lpfnWndProc As Long
cbClsExtra As Long
cbWndExtra As Long
hInstance As Long
hIcon As Long
hCursor As Long
hbrBackground As Long
lpszMenuName As String
lpszClassName As String
hIconSm As Long
End Type

Private Type CREATESTRUCT
lpCreateParams As Long
hInstance As Long
hMenu As Long
HwndParent As Long
cy As Long
cx As Long
y As Long
x As Long
style As Long
lpszName As String
lpszClass As String
ExStyle As Long
End Type

Private Type POINTAPI
x As Long
y As Long
End Type

Private Type MSG
lhwnd As Long
tMessage As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type

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

Private Type PAINTSTRUCT
hdc As Long
fErase As Long
rcPaint As RECT
fRestore As Long
fIncUpdate As Long
rgbReserved(32) As Byte 'this was declared incorrectly in VB API viewer
End Type

Private Const WS_VISIBLE As Long = &H10000000
Private Const WS_VSCROLL As Long = &H200000
Private Const WS_TABSTOP As Long = &H10000
Private Const WS_THICKFRAME As Long = &H40000
Private Const WS_MAXIMIZE As Long = &H1000000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Const WS_MINIMIZE As Long = &H20000000
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const WS_SYSMENU As Long = &H80000
Private Const WS_BORDER As Long = &H800000
Private Const WS_CAPTION As Long = &HC00000 ' WS_BORDER Or WS_DLGFRAME
Private Const WS_CHILD As Long = &H40000000
Private Const WS_CHILDWINDOW As Long = (WS_CHILD)
Private Const WS_CLIPCHILDREN As Long = &H2000000
Private Const WS_CLIPSIBLINGS As Long = &H4000000
Private Const WS_DISABLED As Long = &H8000000
Private Const WS_DLGFRAME As Long = &H400000
Private Const WS_EX_ACCEPTFILES As Long = &H10&
Private Const WS_EX_DLGMODALFRAME As Long = &H1&
Private Const WS_EX_NOPARENTNOTIFY As Long = &H4&
Private Const WS_EX_TOPMOST As Long = &H8&
Private Const WS_EX_TRANSPARENT As Long = &H20&
Private Const WS_GROUP As Long = &H20000
Private Const WS_HSCROLL As Long = &H100000
Private Const WS_ICONIC As Long = WS_MINIMIZE
Private Const WS_OVERLAPPED As Long = &H0&
Private Const WS_OVERLAPPEDWINDOW As Long = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Private Const WS_POPUP As Long = &H80000000
Private Const WS_POPUPWINDOW As Long = (WS_POPUP Or WS_BORDER Or WS_SYSMENU)
Private Const WS_SIZEBOX As Long = WS_THICKFRAME
Private Const WS_TILED As Long = WS_OVERLAPPED
Private Const WS_TILEDWINDOW As Long = WS_OVERLAPPEDWINDOW
Private Const CW_USEDEFAULT As Long = &H80000000
Private Const CS_HREDRAW As Long = &H2
Private Const CS_VREDRAW As Long = &H1
Private Const IDI_APPLICATION As Long = 32512&
Private Const IDC_ARROW As Long = 32512&
Private Const WHITE_BRUSH As Integer = 0
Private Const BLACK_BRUSH As Integer = 4
Private Const WM_KEYDOWN As Long = &H100
Private Const WM_CLOSE As Long = &H10
Private Const WM_DESTROY As Long = &H2
Private Const WM_PAINT As Long = &HF
Private Const SW_SHOWNORMAL As Long = 1
Private Const DT_CENTER As Long = &H1
Private Const DT_SINGLELINE As Long = &H20
Private Const DT_VCENTER As Long = &H4
Private Const WS_EX_STATICEDGE = &H20000
Private Const SW_NORMAL = 1
Private Const BS_GROUPBOX = &H7&


Public sub MyFrame(HwndParent As Long)
Dim tCreate As CREATESTRUCT
Dim lHwnd As Long
' lHwnd = CreateWindowEx(WS_EX_STATICEDGE Or WS_EX_TRANSPARENT, _
' "STATIC", "Label Created on Window", WS_CHILD, _
' 200, 0, 300, 50, HwndParent, 0, App.hInstance, tCreate)

lHwnd = CreateWindowEx(WS_EX_STATICEDGE Or WS_EX_TRANSPARENT, _
"BUTTON", "dd", WS_CHILD Or BS_GROUPBOX, _
200, 0, 300, 50, HwndParent, 0, App.hInstance, tCreate)
ShowWindow lHwndLabel, SW_NORMAL




End sub
kokojin 2008-06-06
  • 打赏
  • 举报
回复
好复杂,可惜我是初学者,看不懂楼上两位在说什么,看不明白呀,可否说简单一点
startbin 2008-06-05
  • 打赏
  • 举报
回复
你不知道有个api叫getdc吗,搞那么复杂干嘛,有hwnd害怕没hdc
红叶哥 2008-06-04
  • 打赏
  • 举报
回复
Private Sub Form_Load()
Frame1.BackColor = Me.BackColor
End Sub
kokojin 2008-06-04
  • 打赏
  • 举报
回复
可是我想把窗体背景颜色改了,所以想把它变成透明的
无·法 2008-06-04
  • 打赏
  • 举报
回复
改成跟窗体背景色一样不就行了吗,默认的backcolor就是按钮表面吧
Sandrer 2008-06-04
  • 打赏
  • 举报
回复
楼上的,复杂的确是很复杂,不过却不是像你说的“画”上去的
bitblt函数需要用到设备场景,问题是VB中的Frame没有hDc属性。

我一般的做法,是用CreateWindowEx函数,自己制作一个!
类名为Button,在它的样式中加上BS_GROUPBOX,则这个Button就会变成Frame
然后在把父窗体(放置frame的窗体)子类化,处理WM_CTLCOLORBTN消息,在WM_CTLCOLORBTN里用SetBKMode函数设置该Frame背景透明即可
startbin 2008-06-04
  • 打赏
  • 举报
回复
不是没办法,但比较麻烦,需要子类frame,然后在paint消息中用bitblt函数把背景画到frame中~~~
kokojin 2008-06-04
  • 打赏
  • 举报
回复
frame1.backcolor=me.backcolor
这条语句只能实现frame的背景色于窗体的背景色一致,但是窗体里插入图片之后似乎不能实现

809

社区成员

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

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