如何实现双缓冲? 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 创建一个内存dc,先将你的东西画到这个内存dc上画好后再一次将内存dc的内容话到你的设备上 HBITMAP ClipBitmap(HBITMAP bmpSrc, int xSrc, int ySrc, int nWidth, int nHeight){ HDC hDc = ::CreateCompatibleDC(NULL); ::SelectObject(hDc, bmpSrc); HDC hdcDest = ::CreateCompatibleDC(hDc); HBITMAP ret = ::CreateCompatibleBitmap(hDc, nWidth, nHeight); ::SelectObject(hdcDest, ret); ::BitBlt(hdcDest, 0, 0, nWidth, nHeight, hDc, xSrc, ySrc, SRCCOPY); ::DeleteDC(hdcDest); ::DeleteDC(hDc); return ret;}这个就是双缓冲 CDC MemDC; //首先定义一个显示设备对象CBitmap MemBitmap;//定义一个位图对象//随后建立与屏幕显示兼容的内存显示设备MemDC.CreateCompatibleDC(NULL);//这时还不能绘图,因为没有地方画 ^_^//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小,也可以自己定义(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上)MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);//将位图选入到内存显示设备中//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);//先用背景色将位图清除干净,这里我用的是白色作为背景//你也可以用自己应该用的颜色MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));//绘图MemDC.MoveTo(……);MemDC.LineTo(……);//将内存中的图拷贝到屏幕上进行显示pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);//绘图完成后的清理MemBitmap.DeleteObject();MemDC.DeleteDC(); 是这个吗http://blog.csdn.net/wozhaolala/archive/2009/06/10/4258554.aspx MFC中如何创建一个异步提示框 VC里面怎么制作出树型列表,就是里面的数据可以纠缩与展开.一行可以显示多列, 关键是一行显示多列的树型列表 又是一个关于sniffer的问题,比较莫名其妙 如何在对话框中显示jpg图片啊! 怎样改变其他程序(进程)窗体的字体颜色? txt文件中某一字符串的查找 我想做一个简单的邮件发送程序? 如何自定义文件对话框 请高手指导一下VB与VC通讯,以及opengl插件的问题 一个vc中来的问题,关于CTabCtrl(ActiveX)的问题,分不够再加! CEdit如何从右向左选定文本? 向各位师兄求点经验
画好后再一次将内存dc的内容话到你的设备上
HBITMAP ClipBitmap(HBITMAP bmpSrc, int xSrc, int ySrc, int nWidth, int nHeight)
{
HDC hDc = ::CreateCompatibleDC(NULL);
::SelectObject(hDc, bmpSrc); HDC hdcDest = ::CreateCompatibleDC(hDc);
HBITMAP ret = ::CreateCompatibleBitmap(hDc, nWidth, nHeight); ::SelectObject(hdcDest, ret); ::BitBlt(hdcDest, 0, 0, nWidth, nHeight, hDc, xSrc, ySrc, SRCCOPY);
::DeleteDC(hdcDest);
::DeleteDC(hDc); return ret;
}这个就是双缓冲
CBitmap MemBitmap;//定义一个位图对象
//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//这时还不能绘图,因为没有地方画 ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小,也可以自己定义(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上)
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
//绘图
MemDC.MoveTo(……);
MemDC.LineTo(……);//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
//绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();
http://blog.csdn.net/wozhaolala/archive/2009/06/10/4258554.aspx