做大半透明不规则窗口的朋友进.
做过半透明不规则窗口的朋友进..
这些天在研究半透明不规则窗口的实现,
想必大家都知道很多游戏都用这种窗口做launch界面,如大话西游3,天下3,暗黑3等
看了很多文章、demo,发现大多都是用两个窗口实现,即:
一个虚拟窗口用于绘制半透明窗口(通过UpdateLayeredWindow()接口),
再用一个子窗口(用户实际派生的窗口)绘制控件.
而为了镂空掉这个子窗口的背景,就要将子窗口设置成层级窗口(WS_EX_LAYERED),然后定义一个画刷,该画刷擦背景就用该透明色去擦,擦控件就用实际颜色去擦(OnCtlColor()).
这样的话,就牺牲了一个颜色值,比如,当代码编写者使用这个透明色绘制文本的时候,这个文本将什么也看不见。
还有个问题就是两个窗口的移动不完全同步,即拖动半透明窗口的时候,其子窗口的移动总是慢一两拍.
总体看来,不是很完美,
各位有什么好的方法??
------解决方案--------------------
一个窗口就行,不需要两个窗口。
真彩色支持 255*255*255种颜色组合
牺牲一种(比如透明的标准色粉红色)完全可以接受
这些天在研究半透明不规则窗口的实现,
想必大家都知道很多游戏都用这种窗口做launch界面,如大话西游3,天下3,暗黑3等
看了很多文章、demo,发现大多都是用两个窗口实现,即:
一个虚拟窗口用于绘制半透明窗口(通过UpdateLayeredWindow()接口),
再用一个子窗口(用户实际派生的窗口)绘制控件.
而为了镂空掉这个子窗口的背景,就要将子窗口设置成层级窗口(WS_EX_LAYERED),然后定义一个画刷,该画刷擦背景就用该透明色去擦,擦控件就用实际颜色去擦(OnCtlColor()).
这样的话,就牺牲了一个颜色值,比如,当代码编写者使用这个透明色绘制文本的时候,这个文本将什么也看不见。
还有个问题就是两个窗口的移动不完全同步,即拖动半透明窗口的时候,其子窗口的移动总是慢一两拍.
总体看来,不是很完美,
各位有什么好的方法??
------解决方案--------------------
一个窗口就行,不需要两个窗口。
真彩色支持 255*255*255种颜色组合
牺牲一种(比如透明的标准色粉红色)完全可以接受