前言
本文记录了我学习MiniGui开发过程中遇到的一些有意思问题与解决方法,会随着我学习的深入慢慢的更新下去。文章中窗口指的是通过CreateMainWindow创建的窗口,控件是指CreateWindow或CreateWindowEx创建的控件。
1 创建透明背景窗口
方法一:窗口创建时,在界面的窗口过程函数里添加MSG_ERASEBKGND监听,什么也不画就是透明背景,这种方法有一个缺陷,就是透明背景只能和创建窗口的时候一样,改变控件的形状或位置,原来控件的形状或位置还留在原来的地方,不能透明
case MSG_ERASEBKGND: {
return 0;
}
方法二:使用mlshadow引擎
1、在配置的时候使能videomlshadow,真实引擎可以使用fbcon或qvfb,这里使用qvfb
./configure --enable-qvfbial --enable-videoqvfb --enable-videomlshadow
2、配置MiniGUI.cfg,把gal_engine的值换成mlshadow,mlshadow的real_engine换成qvfb就可以了。def_bgcolor是背景色,double_buffer可以取值enable/disable,表示刷屏时是否使用双缓冲。
MLShadow 引擎是实现了在机顶盒、PMP等产品的方案中提供多个显示层,以完成类似硬件提供的图形层叠加功能,自动实现层之间的透明、半透明的显示。
[system]
# GAL engine and default options
gal_engine=mlshadow
defaultmode=800x480-32bpp
[qvfb]
defaultmode=800x480-32bpp
display=0
[mlshadow]
real_engine=qvfb
defaultmode=800x480-32bpp
def_bgcolor=0x00FF00
double_buffer=enable
3、MiniGUI 提供了对 MLShadow 引擎当中虚拟图形层的操作函数,以实现对不同图形层的控制