1. ScalableMappingMode ¶
๋
ผ๋ฆฌ ์ขํ์ ์ฅ์น ์ขํ๊ฐ์ ๋งคํ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ชจ๋๋ ๋๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
MM_ISOTROPIC, MM_ANISOTROPIC
์ ์์ ๊ฒ์ x, y์ถ์ ๋ํ scale factor ๋ฅผ ๋์ผํ๊ฒ, ํ์๋ ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ ์ค์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
MM_ISOTROPIC, MM_ANISOTROPIC
์ ์์ ๊ฒ์ x, y์ถ์ ๋ํ scale factor ๋ฅผ ๋์ผํ๊ฒ, ํ์๋ ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ ์ค์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
WindowOrigin | ์๋์ฐ์ ์ผ์ชฝ ์๋น ๋ ผ๋ฆฌ ์ขํ. CDC::SetWindowOrg() ํจ์๋ฅผ ํธ์ถํด์ ์ค์ |
WindowExtent | ๋ ผ๋ฆฌ ์ขํ ์์ ์ง์ ๋์ด ์๋ ์๋์ฐ์ ํฌ๊ธฐ. CDC::SetWindowExt()๋ก ํธ์ถ |
ViewportOrigin | ์ฅ์น ์ขํ์ ๋์ด ์๋ ์๋์ฐ์ ์ผ์ชฝ ์๋จ์ ์ขํ. CDC::SetViewportOrg()๋ก ํธ์ถ |
ViewportExtent | ์ฅ์น ์ขํ ๋จ์์ ์๋์ฐ์ ํฌ๊ธฐ. CDC::SetViewportExt()ํจ์๋ก ํธ์ถ |
๋ทฐํฌํธ๋ ๋
ผ๋ฆฌ์ขํ๊ฐ ์ฅ์น์ขํ๋ก ๋ณํ๋๋ ํ๋ผ๋ฉํฐ์ ์ญํ ์ ํ๋ค.
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;