Symbian 屏幕双缓冲实现
来源:互联网 发布:mac word 大小写转换 编辑:程序博客网 时间:2024/05/22 07:41
前提:
为什么要有屏幕双缓冲?如果屏幕刷新率很高的情况下,就会出现闪屏。为了解决闪屏问题,就出现屏幕双缓冲。
个人理解:屏幕双缓冲,就是对Draw函数的改造。比如说一个Container页面中有20张图片要显示,那么以往的做法是在Draw()函数,每一张图片都画到屏幕上,要画20次。而屏幕双缓冲的做法是先在内存中开辟一块空间(大小可以自己设置),在Draw()函数中,把这20张图片都先画到内存的空间中,然后把该内存在Draw()的最后画到屏幕上。可想而知,操作内存要比操作屏幕快的多,这样就解决屏幕闪屏的问题了。
内容:
1.在Container的.h文件中声明类:
class CFbsBitmap;
class CFbsBitmapDevice;
class CFbsBitGc;
添加私有成员变量
CFbsBitmap * iOffScrnBmp;
CFbsBitmapDevice* iOffScrnBmpDevice;
CFbsBitGc* iOffScrnContext;
添加动态链接库
fbscli.lib
bitgdi.lib
2.在Container的.cpp文件中添加
#define MEM_FREE(a) if(a){delete a;a=NULL;}
3.在Container的.cpp文件中的构造函数中添加
iOffScrnBmp = NULL;
iOffScrnBmpDevice = NULL;
iOffScrnContext = NULL;
4.在析构函数中添加
MEM_FREE(iOffScrnBmp);
MEM_FREE(iOffScrnBmpDevice);
MEM_FREE(iOffScrnContext);
5.在ConstructL函数的CreateWindowL();SetRect( aRect );后面添加
iOffScrnBmp = new (ELeave) CFbsBitmap;
User::LeaveIfError(iOffScrnBmp->Create(Size(), EColor4K));
iOffScrnBmpDevice = CFbsBitmapDevice::NewL(iOffScrnBmp);
User::LeaveIfError(iOffScrnBmpDevice->CreateContext(iOffScrnContext));
6.在Draw函数中添加
// 把我们的buffer清空
iOffScrnContext->Clear(Rect());
// 在buffer里画方块,而不是在屏幕上
for (int i=0; i<100; i+=2)
{
iOffScrnContext->DrawRect(TRect(TPoint(i,i), TSize(50,50)));
}
// 一次性把buffer画到屏幕上
CWindowGc& gc = SystemGc();
gc.BitBlt(TPoint(0,0), iOffScrnBmp);
呵呵,发现屏幕双缓冲也不是那么的高深。
- Symbian 屏幕双缓冲实现
- Symbian屏幕双缓冲&&DSA
- Symbian屏幕双缓冲&&DSA
- Symbian屏幕双缓冲&&DSA
- Symbian屏幕双缓冲&&DSA
- Symbian屏幕双缓冲&&DSA
- Symbian屏幕双缓冲&&DSA
- Symbian屏幕双缓冲&&DSA
- Symbian屏幕双缓冲&&DSA
- Symbian屏幕双缓冲&&DSA
- Symbian屏幕双缓冲&&DSA
- Symbian屏幕双缓冲&&DSA
- Symbian屏幕双缓冲&&DSA
- Symbian屏幕双缓冲和DSA
- Symbian屏幕双缓冲和DSA
- Symbian屏幕双缓冲和DSA
- Symbian屏幕双缓冲和DSA
- Symbian屏幕双缓冲和DSA
- Silverlight连连看剑三篇
- csdn确实是个好地方!
- Oracle字符集问题总结
- Listener
- java泛型T.class的获取
- Symbian 屏幕双缓冲实现
- 自已开发的一个可以无限节点的自定义树型控件
- C#老生常谈之AutoResetEvent和ManualResetEvent
- Using Git with Google Code Hosting
- Symbian 获取AppUi的指针
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- Ubuntu Black screen after boot splash
- 天龙八部二进制文件 读写序列化类
- 我的FireFox插件配置