1. ScalableMappingMode ¶
논리 좌표와 장치 좌표간의 매핑을 변경할 수 있는 모두는 두가지가 존재한다.
MM_ISOTROPIC, MM_ANISOTROPIC
전자의 것은 x, y축에 대한 scale factor 를 동일하게, 후자는 각각 다르게 설정하는 것이 가능하다.
MM_ISOTROPIC, MM_ANISOTROPIC
전자의 것은 x, y축에 대한 scale factor 를 동일하게, 후자는 각각 다르게 설정하는 것이 가능하다.
2. LogicalCoordinate To DeviceCoordinate ¶
~cpp xDevice = (xLogical - xWindowOrg) * (xViewPortExt / xWindowExt) + xViewportOrg
~cpp yDevice = (yLogical - yWindowOrg) * (yViewPortExt / yWindowExt) + yViewportOrg
좌표계가 MM_ISOTROPIC, MM_ANISOTROPIC 이외의 다른 것은 WindowExt, ViewPortExt 가 고정되어 변경이 불가능하다.
CDC::SetWindowExt(), SetViewportExt()를 호출해도 아무런 변화가 생기지 않는다.
3. 확대 기능시의 CScrollView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) ¶
~cpp // TODO: 확대 기능의 구현을 위해서 뷰포트의 범위를 변경한다. CPainterDC* pDoc = GetDocument(); pDC->SetMapMode(MM_ANISOTROPIC); // map mode 설정 CSize DocSize = pDoc->GetDocSize(); // MM_LOENGLISH 모드를 원하기 때문에 y의 범위는 음수가 되어야 한다. DocSize.cy = -DocSize.cy; pDoc->SetWindowExt(DocSize); // 윈도우의 범위를 설정한다. // 인치당 픽셀의 개수를 얻는다. int xLogPixels = pDC->GetDeviceCaps(LOGPIXELSX); // 인자에 해당하는 장치 정보를 리턴한다. 인치당 픽셀의 개수를 리턴. 100단위 int yLogPixels = pDC->GetDeviceCaps(LOGPIXELSY); // x와 y에서의 뷰 포트 범위를 계싼한다. int xExtent = DocSize.cx * m_Scale * xLogPixels / 100; int yExtent = DocSize.cy * m_Scale * yLogPixels / 100;