文档视图结构的双缓冲问题,拖动滚动条时显示内容不正常。

时间:2021-12-19 16:19:55
显示的时候,拖动滚动条时显示内容不正常。
void CGenTestView::OnDraw(CDC* pDC)
{
CGenTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CDC memDC;
CBitmap memBitmap;
memDC.CreateCompatibleDC(NULL);
CRect rect;
GetClientRect(&rect);
memBitmap.CreateCompatibleBitmap(pDC, rect.right, rect.bottom);
CBitmap *pOldBitmap = memDC.SelectObject(&memBitmap);
memDC.FillSolidRect(0, 0, rect.right, rect.bottom, RGB(255, 255, 255));
for (auto iter = pDoc->begin(); iter != pDoc->end(); ++iter)
{
std::shared_ptr<CElement> pElement(*iter);
pElement->Draw&memDC);

}
pDC->BitBlt(0, 0, rect.right, rect.bottom, &memDC, 0, 0, SRCCOPY);
memBitmap.DeleteObject();
memDC.DeleteDC();
}

void CElement::Draw(CDC* memDC)
{

memDC->TextOutW(m_StartPoint.x,m_StartPoint.y,m_strFreq);
memDC->TextOutW(m_StartPoint.x + 200, m_StartPoint.y, m_strPower);
if (true == this->m_bState)
memDC->SetTextColor(RGB(0, 0, 0));
else
memDC->SetTextColor(RGB(255, 0, 0));
memDC->TextOutW(m_StartPoint.x + 400, m_StartPoint.y, m_strOutPower);
memDC->TextOutW(m_StartPoint.x + 600, m_StartPoint.y, m_strResult);
memDC->SetTextColor(RGB(0, 0, 0));
}
请问是什么问题?

6 个解决方案

#1


拖动滚动条时,你图像,文档的起始位置是不是有错?有的是相对于客户端顶点的,有的是相对于其他的

#2


GetScrollPosition 确定起始位置

#3


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#4


滚动视图的双缓冲要稍微复杂一点,以前对话框那套代码是不能直接拿上去用的,这涉及到映射变换,详见我的博客
http://blog.csdn.net/pcradio/article/details/46709341
代码下载 http://download.csdn.net/detail/pcradio/8858021

#5


已解决,内存DC过小,绘图超出内存DC设置的范围后就出问题

#6


引用 5 楼 u010333722 的回复:
已解决,内存DC过小,绘图超出内存DC设置的范围后就出问题

你用超大位图填充整个滚动区域是不可取而且效率极低的做法

#1


拖动滚动条时,你图像,文档的起始位置是不是有错?有的是相对于客户端顶点的,有的是相对于其他的

#2


GetScrollPosition 确定起始位置

#3


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#4


滚动视图的双缓冲要稍微复杂一点,以前对话框那套代码是不能直接拿上去用的,这涉及到映射变换,详见我的博客
http://blog.csdn.net/pcradio/article/details/46709341
代码下载 http://download.csdn.net/detail/pcradio/8858021

#5


已解决,内存DC过小,绘图超出内存DC设置的范围后就出问题

#6


引用 5 楼 u010333722 的回复:
已解决,内存DC过小,绘图超出内存DC设置的范围后就出问题

你用超大位图填充整个滚动区域是不可取而且效率极低的做法