Есть класс вида CZoomView наследованный от CScrollView. он нормально потдержует масштабирование и скролинг. вот так подготавливется контекст устройства:
| Код |
void QZoomView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) { if (!pDC->IsPrinting()) { ASSERT(m_Zoom > 0.0f); int denom(1000); int num; num=(m_Zoom * denom); if (pDC->GetMapMode() == MM_TEXT) { pDC->SetMapMode(MM_ANISOTROPIC); CSize sz; sz=pDC->ScaleWindowExt(denom, 1, denom, 1); num =num*denom; } else { pDC->SetMapMode(MM_ANISOTROPIC); } CSize sz; sz=pDC->ScaleViewportExt(num, denom, num, denom);
CRect rect; GetClientRect(&rect);
CPoint pntVO = -GetDeviceScrollPosition(); if (m_totalDev.cx < rect.Width()) pntVO.x = (rect.Width() - m_totalDev.cx) / 2; if (m_totalDev.cy < rect.Height()) pntVO.y = (rect.Height() - m_totalDev.cy) / 2; pDC->SetViewportOrg(pntVO); CPoint ptOrg; ptOrg.x=m_totalLog.cx/2; ptOrg.y=m_totalLog.cy/2; pDC->OffsetWindowOrg(-ptOrg.x,-ptOrg.y);
} CView::OnPrepareDC(pDC, pInfo); }
|
Хачу вывод графики периписать на OpenGl. Как, так же преоброзовать логическую систему координат в OpenGL?
|