关于内存绘图的问题

void CCurveView::OnPaint() { CPaintDC dc(this);//device context for painting CDC MemDC;//定义一个显示设备对象 CBitmap MemBitmap;//定义一个位图对象 GetClientRect(&m_rect);//CRect m_rect; MemDC.CreateCompatibleDC(NULL);//建立一个与屏幕显示兼容的内存显示设备 //建立一个与屏幕显示兼容的位图,位图大小用窗口大小 MemBitmap.CreateCompatibleBitmap(&dc,m_rect.Width(),m_rect.Height()); //将位图选入到内存显示设备中,选入了位图的内存显示设备才有地方绘图,画到指定的位图上 CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap); //调函数用背景色将位图清除干净 Func1(&MemDC); //画曲线 Func2(&MemDC); //将内存中的图拷贝到屏幕上进行显示 dc.BitBlt(0,0,m_rect.Width,m_rect.Height(),&MemDC,0,0,SRCCOPY); //绘图后完成清理 MemBitmap.DeleteObject(); MemDC.DeleteDC(); }

说明:

假如你要对屏幕进行比较多的gdi函数操作,如果每一步操作都直接对屏幕dc进行操作,那出现的大多数可能性都是屏幕的闪烁。

一个很好的解决方法就是使用内存dc,将这些操作全部先在内存dc上操作,然后一次性在屏幕上进行操作。

在执行MemDC.CreateCompatibleDC(NULL);的语句时,内存并没有分配.

MemDC.SelectObject(&MemBitmap);时分配了内存.

你可能感兴趣的:(关于内存绘图的问题)