请问如何消除动画闪屏现象? 我花的一个表盘在timer间距较小时有闪屏现象,如何解决?如能提供源代码或网址参考更好. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个问题解决的办法是,在创建一个和屏幕属性一样的DC,每次先画后台DC,画好后再用BitBlt刷新当前显示用的DC。可以参考以下代码创建内存中的DC CClientDC pDC(this); ::GetWindowRect ( ::GetDesktopWindow(), &rc ); m_pMemDC->CreateCompatibleDC(&pDC); m_pBitmap->CreateCompatibleBitmap(&pDC,1600,1280); CBitmap* pOldBitmap = (CBitmap*) (m_pMemDC->SelectObject(m_pBitmap)); m_pOldBitmap = m_pMemDC->SelectObject(m_pBitmap); m_pMemDC->SelectClipRgn(NULL); CBrush *backgroundBrush; backgroundBrush = new CBrush; backgroundBrush->CreateSolidBrush((COLORREF)::GetSysColor(COLOR_WINDOW)); CBrush *pOldBrush = m_pMemDC->SelectObject(backgroundBrush); m_pMemDC->PatBlt(0, 0, 1600, 1280, PATCOPY); m_pMemDC->SelectObject(pOldBrush); delete backgroundBrush; http://www.codeproject.com/gdi/bufferdc.asp 应该不用全部重画就能解决这个问题。InvalidateRect lxjnet(根据地)的方法算作是屏幕缓冲法。还有页翻转法,可以达到更好的效果,不过GDI可能不行,得用directX。原理很简单,在显存中创建多个显示页,轮流在各个页上绘图,并指定显示设备轮流显示各个页。 Rigel(猎户座-参宿七)所说,类似于不洁矩形(dirty rectangle) 应该设置双缓冲现在内存中把要输出的内容创建完再一次话到屏幕重画屏幕时,避免全部重画可以使用这个函数void InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE );使用时先计算需要重画的矩形lpRect VC开发用什么数据库好? 消息版本号如何定义? 如何读下面的文件内容然后按照要求存起来 为什么有时点击关闭按钮,对话框会死掉? 请问哪位高人有程序启动登录和修改密码模块的例子(代码)或说明? 关于非模式对话框的问题 哪位高手再帮忙给个MSMQ通信程序的源代码吧(VC库中的那个已经有了),谢谢啦! 简单视图问题! dao的问题 问一下SendMessage,PostMessage的区别? 请大家谈谈Visual studio.NET的中文版好呢?还是英文的好? 怎么判断RadioButton是否被点中了,用什么函数?
m_pMemDC->CreateCompatibleDC(&pDC);
m_pBitmap->CreateCompatibleBitmap(&pDC,1600,1280);
CBitmap* pOldBitmap = (CBitmap*) (m_pMemDC->SelectObject(m_pBitmap));
m_pOldBitmap = m_pMemDC->SelectObject(m_pBitmap);
m_pMemDC->SelectClipRgn(NULL);
CBrush *backgroundBrush;
backgroundBrush = new CBrush;
backgroundBrush->CreateSolidBrush((COLORREF)::GetSysColor(COLOR_WINDOW));
CBrush *pOldBrush = m_pMemDC->SelectObject(backgroundBrush);
m_pMemDC->PatBlt(0, 0, 1600, 1280, PATCOPY);
m_pMemDC->SelectObject(pOldBrush);
delete backgroundBrush;
还有页翻转法,可以达到更好的效果,不过GDI可能不行,得用directX。
原理很简单,在显存中创建多个显示页,轮流在各个页上绘图,并指定显示设备轮流显示各个页。
Rigel(猎户座-参宿七)所说,类似于不洁矩形(dirty rectangle)
现在内存中把要输出的内容创建完
再一次话到屏幕
重画屏幕时,避免全部重画
可以使用这个函数
void InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE );
使用时先计算需要重画的矩形lpRect