vb.net 创建透明窗体

CK12332 2014-07-29 11:01:20
在网上找了很久,都没有合适的解决办法。。。
网上基本上都是直接改窗体的Opacity属性,但是这会带来一个问题,就是窗体上的控件同样会变得透明。
有没有什么办法能让窗体透明,但是控件却不透明的吗?
...全文
657 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tpxxn 2016-01-31
  • 打赏
  • 举报
回复
引用 6 楼 dylike 的回复:
使用Updatelayeredwindow样式,并且所有要显示的控件绘制到一张图中,然后将这张图合成到桌面,当程序中有任何事件等导致画面上有变化时,需要重新绘制,这有点类似DX渲染原理. 示例图: 可选简化代码量配件: DSAPI.DLL
Dim F As New Form
        With F
            .FormBorderStyle = Windows.Forms.FormBorderStyle.None
            .ShowIcon = False
            .ShowInTaskbar = False
            Dim B As New Bitmap(30, 30)
            Using G As Graphics = Graphics.FromImage(B)
                G.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
                G.DrawEllipse(New Pen(Brushes.Red, 5), New Rectangle(0, 0, 30, 30))
            End Using
            DSAPI.图形图像.透明窗体.窗体支持鼠标拖动(F, True)
            DSAPI.图形图像.透明窗体.显示图像(F, B, 255)
            F.Show()
        End With
请问如何调用这个dll啊
Tiger_Zhao 2014-07-30
  • 打赏
  • 举报
回复
少打字了:
——实际上不限于窗体背景,窗体上只要同一个颜色就会透明,比如图片中的紫色。
Tiger_Zhao 2014-07-30
  • 打赏
  • 举报
回复
两者透明方式中,Opactity 是整体透明,你需要的是按颜色透明:
窗体的 TransparencyKey 设一个特殊的颜色(比如不常用的紫色),BackColor 也设为相同的颜色。
控件的 BackColor 要显式指定为 ButtonFace 之类。
运行、就只有窗体背景透明。
——实际上不限于窗体上只要同一个颜色就会透明,比如图片中的紫色。
平头哥哥 2014-07-30
  • 打赏
  • 举报
回复
近期 也在 研究 这个 问题! 想了一个很戳的 解决办法: 假设 form1,背景色是 灰色, shape1(直接依附在form1上)需要设置为透明,就将它的背景色设置的和form1一样即可。
Tiger_Zhao 2014-07-30
  • 打赏
  • 举报
回复
多此一举,TransparencyKey 自动实现了该功能!
threenewbee 2014-07-30
  • 打赏
  • 举报
回复
引用 6 楼 dylike 的回复:
使用Updatelayeredwindow样式,并且所有要显示的控件绘制到一张图中,然后将这张图合成到桌面,当程序中有任何事件等导致画面上有变化时,需要重新绘制,这有点类似DX渲染原理. 示例图: 可选简化代码量配件: DSAPI.DLL
Dim F As New Form
        With F
            .FormBorderStyle = Windows.Forms.FormBorderStyle.None
            .ShowIcon = False
            .ShowInTaskbar = False
            Dim B As New Bitmap(30, 30)
            Using G As Graphics = Graphics.FromImage(B)
                G.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
                G.DrawEllipse(New Pen(Brushes.Red, 5), New Rectangle(0, 0, 30, 30))
            End Using
            DSAPI.图形图像.透明窗体.窗体支持鼠标拖动(F, True)
            DSAPI.图形图像.透明窗体.显示图像(F, B, 255)
            F.Show()
        End With
感谢分享。你的代码应该能帮助lz了。
dylike 2014-07-30
  • 打赏
  • 举报
回复
使用Updatelayeredwindow样式,并且所有要显示的控件绘制到一张图中,然后将这张图合成到桌面,当程序中有任何事件等导致画面上有变化时,需要重新绘制,这有点类似DX渲染原理.

示例图:



可选简化代码量配件:
DSAPI.DLL

Dim F As New Form
With F
.FormBorderStyle = Windows.Forms.FormBorderStyle.None
.ShowIcon = False
.ShowInTaskbar = False
Dim B As New Bitmap(30, 30)
Using G As Graphics = Graphics.FromImage(B)
G.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
G.DrawEllipse(New Pen(Brushes.Red, 5), New Rectangle(0, 0, 30, 30))
End Using
DSAPI.图形图像.透明窗体.窗体支持鼠标拖动(F, True)
DSAPI.图形图像.透明窗体.显示图像(F, B, 255)
F.Show()
End With
CK12332 2014-07-29
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
如果程序在vista以上运行,可以直接实现: http://msdn.microsoft.com/en-us/magazine/cc163435.aspx 要想在xp上创建这样的程序,比较复杂。核心是使用核心是使用UpdateLayeredWindow API函数。但是这样一来,控件就没法绘制了,有一些变通的方法,比如用多个窗体,或者自己绘制等等,有兴趣自己研究吧。 参考:http://blog.csdn.net/CometNet/article/details/6561912 http://www.zystudios.cn/blog/post/26.Shtml
可惜了,我没有接触过C#,代码完全不懂啊
threenewbee 2014-07-29
  • 打赏
  • 举报
回复
如果程序在vista以上运行,可以直接实现: http://msdn.microsoft.com/en-us/magazine/cc163435.aspx 要想在xp上创建这样的程序,比较复杂。核心是使用核心是使用UpdateLayeredWindow API函数。但是这样一来,控件就没法绘制了,有一些变通的方法,比如用多个窗体,或者自己绘制等等,有兴趣自己研究吧。 参考:http://blog.csdn.net/CometNet/article/details/6561912 http://www.zystudios.cn/blog/post/26.Shtml

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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