透明渐变标题栏
还是记录下jacen在群里发的代码,以后方便学习。
import win.ui;
/*DSG{{*/
var winform = win.form(text="透明渐变标题栏";right=759;bottom=469;border="none")
winform.add(
plus={cls="plus";left=0;top=0;right=760;bottom=488;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/
import win.ui.simpleWindow3;
win.ui.simpleWindow3(winform)
import inet.http;
winform.plus.background = "http://pic23.photophoto.cn/20120429/0027011761472219_b.jpg";
winform.onEraseBkgnd = λ() 0;
winform.show()
win.loopMessage();
这样图像缩放流畅些,为了示例简单使用plus支持加载网址的功能,实际使用图像放到窗口背景上就可以
知道为什么加了 winform.onEraseBkgnd = λ() 0; 就不闪了吗
窗口的绘制流程是这样:
1、擦除窗口的背景
2、画窗口
3、挨个擦除控件的背景
4、挨个画控件像上面我发的那个程序,用了一个plus控件占据了整个窗口,其实是不用画背景的。但窗口不知道啊,计算机没办法聪明到这个程度,他会僵硬的依旧画一遍,虽然很快,但因为面积很大,就会有一个快速的闪烁过程。
窗口画背景的时候,会发送WM_ERASEBKGND消息,我们可以拦截这个消息,但这个消息也会触发onEraseBkgnd事件,所以我们在onEraseBkgnd回调里拦截也可以。
winform.onEraseBkgnd = function() return 0;
就是告诉窗口你不用画背景了(交给我来帮你画吧,这样就省掉了一步)
补充语法知识点:
winform.onEraseBkgnd = λ() 0;
也就是
winform.onEraseBkgnd = lambda() 0;
相当于
winform.onEraseBkgnd = function() return 0;
类似的像web.form这种浏览器控件,也会用到这个方法,因为网页会自己画背景,容器窗口就没必要多余的画一次
登录后方可回帖