如何实现透明窗体?

superrg 2004-06-11 10:18:51
用mediaplayer控件做了个播VCD的小软件,想要在右上角显示系统时间及已播时间,希望可以用一透明窗体,并在上面直接写这两个时间来实现,但具体操作时发现文字背景不能透明,哪位知道如何做?
...全文
283 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
GuiltyGear 2004-06-18
  • 打赏
  • 举报
回复
directshow 用了 overlay 就别想在视屏区用gdi 来做透明了
James0001 2004-06-17
  • 打赏
  • 举报
回复
hDC = GetDC(hAWin)
...
DeleteDC hDC (???)
edot 2004-06-17
  • 打赏
  • 举报
回复
初学者
kmzs 2004-06-13
  • 打赏
  • 举报
回复
DirectShow,恩
charmgjj 2004-06-13
  • 打赏
  • 举报
回复
我是来学习的
dongge2000 2004-06-12
  • 打赏
  • 举报
回复
XP下更难,因MOUSE有阴影。
superrg 2004-06-12
  • 打赏
  • 举报
回复
to pigpag(噼里啪啦 - Calibrating):
my mail:
zengzx@mail.ceiinet.com
pigpag 2004-06-12
  • 打赏
  • 举报
回复
Option Explicit
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hDC As Long) As Long
Private Declare Function GetPixel Lib "gdi32.dll" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long

Private Sub Form_Load()
Picture1.Move 90, 90, Me.ScaleWidth, 600
CommonDialog1.ShowOpen
If CommonDialog1.FileName = "" Then End
MediaPlayer1.Open CommonDialog1.FileName
Timer1.Interval = 200: Timer1.Enabled = True
End Sub

Private Sub Form_Resize()
MediaPlayer1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
End Sub

Private Sub Timer1_Timer()
Static Adjusted As Boolean
Dim hAWin As Long, hDC As Long, Color As Long
Picture1.Refresh
If Adjusted Then Exit Sub
hAWin = FindWindowEx(Me.hwnd, 0, "VideoRenderer", "ActiveMovie Window")
If hAWin = 0 Then Exit Sub
hDC = GetDC(hAWin)
Color = GetPixel(hDC, 1, 1)
DeleteDC hDC
SetParent Picture1.hwnd, hAWin
'Picture1.Move 0, 0
Picture1.BackColor = Color
Picture1.Cls
Picture1.Print "正在播放文件:" & vbCrLf & MediaPlayer1.FileName
Adjusted = True
End Sub


环境:一个Form,放上一个MediaPlayer1 (6.4版); Timer1; CommonDialog1; Picture1
superrg 2004-06-11
  • 打赏
  • 举报
回复
to yinweihong(yige):

已试过,不行的

to lihonggen0(李洪根,MS MVP,标准答案来了):
还是实现不了,特别是置顶,全屏时根本不管用
yinweihong 2004-06-11
  • 打赏
  • 举报
回复
还是在窗体上放个透明的背景图片的好~
然后再画个label在上面~
superrg 2004-06-11
  • 打赏
  • 举报
回复
to titan90(touch net):
我原来就是这样做的,得不到透明效果,不信你打开媒体播放器全屏播放试试就知道了
superrg 2004-06-11
  • 打赏
  • 举报
回复
to huangjianyou(小健):
这个透明效果不错,但窗体上不能显示任何文字了,还有,当播放VCD时这个窗体不知道跑哪去了,我设置了置顶功能,但没有发现这个窗体
lihonggen0 2004-06-11
  • 打赏
  • 举报
回复
http://dev.csdn.net/develop/article/18/18774.shtm
titan90 2004-06-11
  • 打赏
  • 举报
回复
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 Command1_Click()
Dim rtn As Long
rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE) '取的窗口原先的样式
rtn = rtn Or WS_EX_LAYERED '使窗体添加上新的样式WS_EX_LAYERED
SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn '把新的样式赋给窗体
SetLayeredWindowAttributes Me.hwnd, 0, 100, LWA_ALPHA '100为透明值,其范围是0-255

end sub
huangjianyou 2004-06-11
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=123362
kmzs 2004-06-11
  • 打赏
  • 举报
回复
98/Me可能比较困难
pigpag 2004-06-11
  • 打赏
  • 举报
回复
顺便说一下,全屏了我就很难保证了……
pigpag 2004-06-11
  • 打赏
  • 举报
回复
那个老帖找不到了。你给我一个Email地址,我给你发一个示例。

其实就是利用了一个DirectShow的工作原理
pigpag 2004-06-11
  • 打赏
  • 举报
回复
我的一个FAQ嘛~~只是审核没通过。我给你找找
superrg 2004-06-11
  • 打赏
  • 举报
回复
to wouldfly(wouldfly):
谢谢了,你这个代码的效果还不是二楼的好,区别在于:
SetLayeredWindowAttributes hwnd, 1, 200, LWA_COLORKEY

而二楼的为:
SetLayeredWindowAttributes Me.hwnd, 0, 100, LWA_ALPHA '100为透明值,其范围是0-255

这种办法我已经试过了,不是不行,是实现我的具体要求时不行,你试试打开媒体播放器播放一下就知道了,透明的效果出不来。

加载更多回复(7)

7,763

社区成员

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

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