CDC的DPtoLP对SetWindowOrg影响
最近在项目中要做打印预览功能,MFC的CView的打印预览工具栏太难看了,而且没有特性,还要加些特性功能,所以决定自己做个工具栏及打印预览功能。其中实现缩放时,用到SetMapMode(MM_ANISOTROPIC)、SetWindowExt、SetViewportExt。预览区要求居中,调了很久都不理想,最后DPtoLP可以居中了,但放大后拖滚动条时SetWindowOrg失效了,代码如下:
void CPrintView::OnPaint()
{
CPaintDC dc(this);
//m_iXCur, m_iYCur拖动滚动条后计算的位置
dc.SetWindowOrg(m_iXCur, m_iYCur);
dc.SetMapMode(MM_ANISOTROPIC);
dc.SetWindowExt(100, 100);
//缩放的百分比m_iPercent
dc.SetViewportExt(m_iPercent, m_iPercent);
//没加下面这句,总是不居中,只有m_iPercent=100时才能居中
//加了下面这句后,虽然能居中了,但dc.SetWindowOrg(m_iXCur, m_iYCur)无效了,拖滚动条显示不正常
dc.DPtoLP(&PrnInfo.rtView); //rtView为视区的矩形区域
CBrush brush;
brush.CreateSolidBrush(RGB(255,255,255));
dc.FillRect(&rtView, &brush);
}
一直搞不清什么原因,难道dc.DPtoLP还能对dc.SetWindowOrg(m_iXCur, m_iYCur)有影响?