当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象,为了解决这些问题,可采用双缓冲技术来绘图。
双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样能大大加快绘图的速度。
下面使用一个简单的例子来说明
不使用双缓冲技术代码:
void CMyStatic::Draw1(CPaintDC& dc)
{
RECT rect;
GetClientRect(&rect);
CBrush brush0(RGB(240,240,240));
dc.FillRect(&rect,&brush0);
RECT rt = rect;
UINT nFormat;
HFONT hFont = ::CreateFontIndirect(&m_LogFont);
HFONT hOldFont = (HFONT)::SelectObject(dc.m_hDC,hFont);
dc.SetBkMode(TRANSPARENT);
//name
nFormat = DT_SINGLELINE|DT_LEFT|DT_VCENTER|DT_END_ELLIPSIS;
dc.SetTextColor(m_dwNameColor);
rt.right = rt.left + m_nNameWidth;
rt.bottom = rt.top + m_nHeight;
dc.DrawText(m_sSignalName,&rt,nFormat);
//value
nFormat = DT_SINGLELINE|DT_LEFT|DT_VCENTER|DT_END_ELLIPSIS;
rt.left = rt.right;
rt.right = rt.left + m_nValueWidth;
dc.FillSolidRect(&rt,m_dwSignalBgColor);
dc.SetTextColor(m_dw

本文介绍了在VS中如何使用双缓冲技术解决大数据量绘图时的闪烁问题和速度慢的问题。通过在内存中创建与屏幕绘图区域一致的对象,先将图形绘制到内存,然后一次性拷贝到屏幕,显著提高绘图速度。

2400

被折叠的 条评论
为什么被折叠?



