一个有关双缓冲绘图的有关问题,大神们看看有什么有关问题!

一个有关双缓冲绘图的问题,大神们看看有什么问题!!!
本帖最后由 *vio 于 2013-08-23 11:32:56 编辑
一下是我写的基于CStatic类的一个让static控件绘图的类:
OnPaint()
{
InitialDBB(&dc);

PaintWave(&dc);

dc.BitBlt(0, 0, m_WinRect.Width(), m_WinRect.Height(), &m_dcMemory, 0, 0, SRCCOPY);

m_dcMemory.DeleteDC();
}

InitialDBB(CDC * pDC)
{
m_WinRect.left = 0;
m_WinRect.top = 0;
m_WinRect.right = m_uiWidth;
m_WinRect.bottom = m_uiHeight;

if(!m_dcMemory.CreateCompatibleDC(NULL))
{
MessageBox(_T("Fail to create a DC !"),NULL,MB_ICONERROR);
::PostQuitMessage(0);
}

CBitmap m_Bmp;
m_Bmp.CreateCompatibleBitmap(pDC, m_WinRect.Width(), m_WinRect.Height());

SelectObject(m_dcMemory.GetSafeHdc(), m_Bmp);

m_dcMemory.BitBlt(0, 0, m_WinRect.Width(), m_WinRect.Height(),&m_dcBackGround, 0,0,SRCCOPY);
m_Bmp.DeleteObject();
}


PaintWave(CDC * pDC)
{
CPen cWavePen(PS_SOLID, 1, m_WaveColor);
CPen * pcOldPen = m_dcMemory.SelectObject(&cWavePen);

int y1[12] = {0};
int y2[12] = {0};
for (int i = 0; i < 6; i++)
{
m_uiBaseLine[i] = (m_uiHeight-m_uiNetWidth)/12*(2*i+1);
}

for (int i = 0; i < (int)(m_uiWidth-2*m_uiWaveEnd); i++ )
{
for (int j = 0; j < m_iWaveQuantity; j++)
{
y1[j] = m_uiBaseLine[j] - m_puiData[j][i] ;
y2[j] = m_uiBaseLine[j] - m_puiData[j][i+1] ;
m_dcMemory.MoveTo(m_uiWaveBeg + i, y1[j]);
m_dcMemory.LineTo(m_uiWaveBeg + i + 1, y2[j]);
}
}

我是在串口收到数据时更改m_puiData的值后执行invaildata()函数重绘,一达到绘制波形的效果。但是,我有两个绘制波形的static控件,都继承的是这个绘图类(基类是CStatic)。
这两个绘图区域一个大一个小,一开始绘图时两个都会更新没有问题,但是当大的绘图区域画了一定时间后,小的区域就不更新了!!!!我感觉可能是有什么资源没有释放!!请大神指点指点啊!!!
m_dcMemory是我的类里的一个CDC成员变量,m_uiWidth生么的也是有缺省值的
双缓冲 控件 bmp

------解决方案--------------------