Where The Streets Have No Name

맵핑모드 (Mapping Mode) 본문

Developement/C, C++, C#

맵핑모드 (Mapping Mode)

highheat 2008. 6. 3. 01:40
출처 : http://bokdol2.tistory.com/entry/맵핑모드-Mapping-Mode

맵핑모드란, 논리좌표와 물리좌표의 관계를 정의하는것이다.
즉, 논리좌표와 물리좌표의 일대일 대응관계를 정의하는 것이다.

윈도우즈에서 디폴트로 사용하는 맵핑모드에서는 논리좌표와 물리좌표가 일치되어있다. 그래서 이런것을 느끼지 못했다.

맵핑 모드 단위 X축 증가 Y축 증가
MM_TEXT 픽셀 오른쪽 아래쪽
MM_LOMETRIC 0.1mm 오른쪽 윗쪽
MM_HIMETRIC 0.01mm 오른쪽 윗쪽
MM_LOENGLISH 0.01인치 오른쪽 윗쪽
MM_HIENGLISH 0.001인치 오른쪽 윗쪽
MM_TWIPS 1/1440인치 오른쪽 윗쪽
MM_ISOTROPIC 가변 가변 가변
MM_ANISOTROPIC 가변 가변 가변

디폴트 맵핑모드는 MM_TEXT이고, 이것은, X축이 오른쪽으로 갈수록 값이 증가하고,
Y축이 아래로 갈수록 값이 증가하는 모드이다.

현재 맵핑모드를 알기위해서는 GetMapMode함수를 사용하고,
맵핑모드를 변경하기 위해서는 SetMapMode함수를 사용해야한다.

GetMapMode(HDC hdc);
SetMapMode(HDC hdc, int fnMapMode);

매핑모드를 설정하려면, OnPrepareDC 또는 OnDraw에서 매핑모드를 설정해주면 된다.
MM_TEXT모드를 제외한 다른 모드의 단위는 픽셀 단위가 아니므로,
화면에 출력할때는 DPtoLP()함수를 사용해서, 논리좌표로 변환해야 한다.

화면스케일
화면스케일 변환모드
MM_ANISOTROPIC     비율이 변해도 됨.
MM_ISOTROPIC         비율을 1:1로 유지해야 됨

스케일 변경
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(1000, 1000);
pDC->SetViewportExt(1000, -1000);  증가, 감소

원점의 위치 변경
CDC::SetWindowOrg()              윈도우 자체이동
DCD::SetViewportOrg()             화면의 보이는 좌표가 이동