窗体透明的方式一共有几种?我需要在让窗体透明,仅仅显示窗体上的png图片,但是使用某一个颜色透明的方式会
窗体透明的方式一共有几种?
我需要在让窗体透明,仅仅显示窗体上的png图片,但是使用某一个颜色透明的方式会让png图片出现锯齿!效果十分不好!大家还有没有让窗体透明的方式?
[解决办法]
估计楼主的图片是不规则的,并非方形的。这个时候的透明色必须是图片上象素没有的颜色。
[解决办法]
透明一般分:颜色透明和整体透明两种,貌似像lz说的那种没有,或者说没有那种透明方式。建议建立和图片外型一样的不规则窗体的方式实现。
[解决办法]
[解决办法]这是美工的问题:
要留一种颜色作为透明背景;
绘图时要没有锯齿;
图像边缘和背景对比要明显,或者保存时选无损压缩,防止压缩混色产生锯齿。
[解决办法]微软的MSDN网站中有相关的介绍呀,使用方法也很简单
Call UpdateLayeredWindow(目标窗口句柄, 目标窗口设备句柄, ByVal 0&, Size结构, GDI设备句柄, POINTAPI结构, 0, BLENDFUNCTION结构, ULW_ALPHA)
[解决办法]锯齿是美工的问题。
不是会不会用 MSDN 或会不会调用 UpdateLayeredWindow() 的关系。
[解决办法]这种窗口不是简单的使用透明色就可以办到的。首先,PNG支持通道,每个象素都有一个alpha值,用以表示这个像素的透明度。
VB要实现这种效果可以使用GDI Plus (常说的GDI+)技术来实现,但问题有2种:
一、窗口中不放置控件
这种效果容易实现,也不麻烦
二、窗口中有控件
这样就比较麻烦。
VB中窗口图形是分层的,背景为一层、静态对像(无wHnd的控件,如Label控件)为一层,动态控件(有wHnd的控件,如Command控件)为一层。
为了实现楼主要求的效果,需要做二件事:常规下的绘制,窗口移动等需要分二次绘制背景层和上面的动态控件层,第二步未做好,可能会导致窗口移动了,控件还在原地未动。
[解决办法]使用UpdateLayeredWindow函数效果最好。
Private Declare Function UpdateLayeredWindow lib "user32" (ByVal hWnd As Long, ByVal hdcDst As Long, ByRef pptDst As POINT, ByRef psize As SIZE, ByVal hdcSrc As Long, ByRef pptSrc As POINT, ByVal crKey As Long, ByRef pblend As BLENDFUNCTION, ByVal dwFlags As Long) As Long