프로그래밍/MFC

MFC GDI 매핑모드

에어버스 2016. 6. 14. 17:36

매핑모드 

단위 

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(00500-500); 
cs

 

<MM_ISOTROPIC 과 MM_ANISOTROPIC 차이>

1
2
3
4
5
6
7
    CRect rect;
    GetClientRect(&rect);
    dc.SetMapMode(MM_ANISOTROPIC);
    dc.SetWindowExt(300300); // 논리단위로 범위 지정 (X축, Y축)
    dc.SetViewportExt(rect.Width(), rect.Height()); // 장치단위로 범위지정 (X축, Y축)
    dc.Ellipse(00300300);
    dc.Rectangle(5050250250);
cs

 

MM_ANSIOTROPIC 매핑모드는 윈도우 크기가 변하면(확대/축소) 가로 세로 비율에 맞춰 그린다.
원본 그림이 비율에 따라 모양이 변한다.

 

1
dc.SetMapMode(MM_ISOTROPIC);
cs

MM_ISOTOROPIC 매핑코드만 바꾸면, 윈도우 크기가 변하면(확대/축소) 가로 세로 고정 비율이 되어 남는 비율은 무시하여 그린다. 원본 그림이 비율에 따다 모양 변화가 없다.


 윈도우의 가로 세로 중 작은쪽을 기준으로 비율이 고정된다. 가로가 길면 세로 높이에 맞춰 가로 폭을 결정한다. 가로 폭이 남으면 무시..

 가로 폭이 세로 폭보다 작아 가로 폭 기준으로 남는 세로 폭은 무시.