U E D R , A S I H C RSS

MFC/Scaling Mode

{{| |}}

1. ScalableMappingMode

논리 μ’Œν‘œμ™€ μž₯치 μ’Œν‘œκ°„μ˜ 맀핑을 λ³€κ²½ν•  수 μžˆλŠ” λͺ¨λ‘λŠ” 두가지가 μ΄μž¬ν•œλ‹€.
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;

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:42
Processing time 0.0124 sec