void CPaintWithDoubleBufferView::DoMyDraw(CDC* pDC)
{
CPaintWithDoubleBufferDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC dc;
CDC* pDrawDC = pDC;
CBitmap bitmap;
CBitmap* pOldBitmap = 0;
// only paint the rect that needs repainting
CRect client;
pDC->GetClipBox(client);
CRect rect = client;
DocToClient(rect);
if (!pDC->IsPrinting())
{
// draw to offscreen bitmap for fast looking repaints
if (dc.CreateCompatibleDC(pDC))
{
if (bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height()))
{
OnPrepareDC(&dc, NULL);
pDrawDC = &dc;
// offset origin more because bitmap is just piece of the whole drawing
dc.OffsetViewportOrg(-rect.left, -rect.top);
pOldBitmap = dc.SelectObject(&bitmap);
dc.SetBrushOrg(rect.left % 8, rect.top % 8);
// might as well clip to the sa
ScrollView + Double Buffer 双缓冲绘图
最新推荐文章于 2017-03-17 20:36:32 发布
该博客介绍了如何在ScrollView中实现双缓冲绘图,通过创建兼容的设备上下文(CDC)和位图,实现了快速刷新的效果。核心代码展示了如何在滚动视图中绘制背景并调用Draw函数进行内容绘制,最后使用BitBlt进行位图复制到屏幕,确保滚动视图的平滑显示。
摘要由CSDN通过智能技术生成