#define _MFC_ {{|[[TableOfContents]]|}} = ScalableMappingMode = 논리 좌표와 장치 좌표간의 매핑을 변경할 수 있는 모두는 두가지가 존재한다. MM_ISOTROPIC, MM_ANISOTROPIC 전자의 것은 x, y축에 대한 scale factor 를 동일하게, 후자는 각각 다르게 설정하는 것이 가능하다. || WindowOrigin || 윈도우의 왼쪽 상당 논리 좌표. CDC::SetWindowOrg() 함수를 호출해서 설정 || || WindowExtent || 논리 좌표 안에 지정되어 있는 윈도우의 크기. CDC::SetWindowExt()로 호출 || || ViewportOrigin || 장치 좌표에 되어 있는 윈도우의 왼쪽 상단의 좌표. CDC::SetViewportOrg()로 호출 || || ViewportExtent || 장치 좌표 단위의 윈도우의 크기. CDC::SetViewportExt()함수로 호출 || ''뷰포트는 논리좌표가 장치좌표로 변환되는 파라메터의 역할을 한다.'' = 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()를 호출해도 아무런 변화가 생기지 않는다. = 확대 기능시의 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; }}} ---- ["MFC"]