MFC GDI 매핑모드
매핑모드 |
단위 |
X축 |
Y축 |
MM_TEXT |
1픽셀 |
→ +X |
↓ +Y |
MM_LOMETRIC |
0.1mm |
→ +X |
↓ -Y |
MM_HIMETRIC |
0.01mm |
→ +X |
↓ -Y |
MM_LOENGLISH |
0.01인치 |
→ +X |
↓ -Y |
MM_HIENGLISH |
0.001인치 |
→ +X |
↓ -Y |
MM_TWIPS |
1/1440인치 |
→ +X |
↓ -Y |
MM_ISOTROPIC |
사용자정의(가로세로 동일) |
사용자정의 |
사용자정의 |
MM_ANISOTROPIC |
사용자정의 |
사용자정의 |
사용자정의 |
MM_TEXT 만 논리단위와 장치 단위가 1:1 대응, 장치에 따라 크기가 달라질 수 있다.
그외 매핑은 논리 단위를 장치 단위로 변환 시 출력장치인 모니터의 종류나 화면의 해상도, 프린터 종류에 따라 단위 길이당 픽셀수가 달라지므로 장치 독립적인 출력이 가능하도록 물리적 길이가 항상 일정하도록 해서 장치에 따라 그림이 동일 크기로 출력이 가능하다.
MM_TEXT 뷰의 (0, 0) dptj Y축이 아래로 커지면 양수값이되나, 이외 매핑은 음수가 된다. (좌표계에서 4사분면)
MM_ISOTROPIC 과 MM_ANISOTROPIC 는 프로그램으로 논리 단위와 장치 단위 변환 관계를 지정할 수 있다. CDC::SetWindowExt(), CDC::SetViewportExt()
1
2
3 |
// 모니타는 제조사마다 픽셀 간격이 달라 정확히 5Cm 안되고, 인쇄하면 정확한 5Cm가 된다.
dc.SetMapMode(MM_LOMETRIC);
dc.Rectangle(0, 0, 500, -500); |
cs |
<MM_ISOTROPIC 과 MM_ANISOTROPIC 차이>
1
2
3
4
5
6
7 |
CRect rect;
GetClientRect(&rect);
dc.SetMapMode(MM_ANISOTROPIC);
dc.SetWindowExt(300, 300); // 논리단위로 범위 지정 (X축, Y축)
dc.SetViewportExt(rect.Width(), rect.Height()); // 장치단위로 범위지정 (X축, Y축)
dc.Ellipse(0, 0, 300, 300);
dc.Rectangle(50, 50, 250, 250); |
cs |
MM_ANSIOTROPIC 매핑모드는 윈도우 크기가 변하면(확대/축소) 가로 세로 비율에 맞춰 그린다.
원본 그림이 비율에 따라 모양이 변한다.
1 |
dc.SetMapMode(MM_ISOTROPIC); |
cs |
MM_ISOTOROPIC 매핑코드만 바꾸면, 윈도우 크기가 변하면(확대/축소) 가로 세로 고정 비율이 되어 남는 비율은 무시하여 그린다. 원본 그림이 비율에 따다 모양 변화가 없다.
윈도우의 가로 세로 중 작은쪽을 기준으로 비율이 고정된다. 가로가 길면 세로 높이에 맞춰 가로 폭을 결정한다. 가로 폭이 남으면 무시..
가로 폭이 세로 폭보다 작아 가로 폭 기준으로 남는 세로 폭은 무시.