如何製作透明控件?

vansoft 2006-02-14 11:04:00
現有一Frame控件源碼,
有四種風格,不是完整的四邊形,
現在需要將該控件的背景變為透明。

請別提示把控件的BackStyle设置为“0 - 透明”,
因為設為0後,所有的繪制都無效,根本看不到畫出來的框架。
...全文
165 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
韧恒 2006-02-16
  • 打赏
  • 举报
回复
//用rgn可以做到透明,但由於是創建了一不規則的區域(窗體),
在幾種風格的切換中,永遠是最小的那個風格的區域。
現在想在切換前先恢復區域,再創建,再繪製。
試試先。

个人认为,理论上可行,但如果frame中的控件形状也是不规则的,可能会麻烦些
vansoft 2006-02-15
  • 打赏
  • 举报
回复
用rgn可以做到透明,但由於是創建了一不規則的區域(窗體),
在幾種風格的切換中,永遠是最小的那個風格的區域。

現在想在切換前先恢復區域,再創建,再繪製。
試試先。
rainstormmaster 2006-02-14
  • 打赏
  • 举报
回复
另外一个思路是根据frame内各个控件的位置,组合出一个rgn,然后用setwindowrgn设置frame控件的rgn,不过,这不是真正意思上的透明
vansoft 2006-02-14
  • 打赏
  • 举报
回复
沒用的。
迈克揉索芙特 2006-02-14
  • 打赏
  • 举报
回复
BackStyle = 0
把绘制过程也写在控件里,但是在父容器上进行绘制。

rainstormmaster 2006-02-14
  • 打赏
  • 举报
回复
//因為設為0後,所有的繪制都無效,根本看不到畫出來的框架

其实看不到框架可能还是次要,重要的是能不能看到容器内的控件
zyl910 2006-02-14
  • 打赏
  • 举报
回复
一、
用SetWindowRgn设置窗口的显示区域


二、
为窗口加上WS_EX_TRANSPARENT风格
并用子类拦截掉WM_PAINT、WM_ERASEBKGND消息,不让VB自动画背景
将图像画好在一个32位DIBSection中,在处理WM_PAINT消息时将该DIBSection用AlphaBlend以AC_SRC_OVER方式画到屏幕上
这样可以实现Alpha透明。唯一的缺点就是受VB刷新机制的影响,闪烁比较明显

1,453

社区成员

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

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