用双缓存绘制方法减少绘图时的闪屏

原创 2007年10月05日 18:40:00

CClientDC dc(this);

CRect rClient;
GetClientRect(&rClient);

CBitmap MemBmp;
MemBmp.CreateCompatibleBitmap(&dc, rClient.Width(), rClient.Height());

CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
CBitmap* pOldMemBmp = MemDC.SelectObject(&MemBmp);

CDC bmpDC;
bmpDC.CreateCompatibleDC(&dc);

CBitmap* pOldBitmap = bmpDC.SelectObject(CBitmap::FromHandle(m_hBgBmp));
MemDC.BitBlt(rClient.left, rClient.top, m_SizeBg.cx, m_SizeBg.cy, &bmpDC, 0, 0, SRCCOPY);
bmpDC.SelectObject(pOldBitmap);
pOldBitmap = NULL;

CString sText = "……";
CFont font;
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = 14;
lf.lfWeight = FW_BOLD;
strcpy_s(lf.lfFaceName, LF_FACESIZE, "宋体");
font.CreateFontIndirect(&lf);
CFont* pOldFont = MemDC.SelectObject(&font);
MemDC.SetBkMode(TRANSPARENT);
MemDC.SetTextColor(RGB(255, 255, 255));
MemDC.TextOut(12, 8, sText);
MemDC.SelectObject(pOldFont);
font.DeleteObject();
DeleteDC(bmpDC);

dc.BitBlt(rClient.left, rClient.top, rClient.Width(), rClient.Height(), &MemDC, 0, 0, SRCCOPY);

MemDC.SelectObject(pOldMemBmp);
MemDC.DeleteDC();
MemBmp.DeleteObject(); 

 

相关文章推荐

VC 双缓存绘图 闪屏

********************所有的GDI绘图函数使用的都是逻辑坐标(逻辑范围)******************* *******************系统默认情况下 物理范围和逻辑...

关于Java闪屏问题使用双缓存方法解决的方法

一,Java闪屏出现的原因: 二,Java闪屏解决的

VC利用双缓存解决闪屏

  • 2008年05月29日 09:46
  • 146KB
  • 下载

双缓存画橡皮线解决闪屏

思想: 之所以闪屏,是因为鼠标在移动过程中,一直都在执行修补语句 pDC->BitBlt(rect.left,rect.top ,rect.Width(),rect.Height(),&Do...

VC使用双缓存技术,解决闪屏问题

1 新建一单文档MFC程序,取名为test1. 2在CTest1View中添加两个成员函数 void ShowBmpUseDbBuffer(); //用双缓存显示位图 void ShowBmp();...

CDC双缓冲防闪屏绘图总结

  • 2012年12月17日 21:14
  • 29KB
  • 下载

对话框中绘图,解决闪屏问题

  • 2008年10月26日 21:16
  • 63KB
  • 下载

CDC双缓冲防闪屏绘图总结

CDC在屏幕绘图可以用以下方法: CDC dc; dc.CreateCompatibleDC(NULL); CBitmap m_bitmap; m_bitmap.LoadBitmap(IDB...

VC 内存绘图,不闪屏

我英语不好,程序中一些使用英文命名的变量或者类
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用双缓存绘制方法减少绘图时的闪屏
举报原因:
原因补充:

(最多只允许输入30个字)