您的位置:首页 > 其它

关于内存绘图的问题

2010-04-26 09:17 302 查看
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);时分配了内存.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: