2011년 3월 8일 화요일


1. 함수의 원형

virtual int SetMapMode( int nMapMode );


2. 함수의 기능

이 함수는 맵핑모드(mapping mode)를 설정하는 함수입니다. 일반적으로 맵핑모드를 설정한다는 뜻은 우리가 프로그램에서 사용한 논리적인 출력단위를 실제 출력장치(예를들면 그래픽카드와 같은 장치)에서 어떤 단위로 출력할것인지를 설정하는 것을 의미합니다. 그리고 맵핑모드를 설정한다는것은 단순히 출력단위만 설정하는것이 아니라 X, Y 축에 대한 기준점도 설정할수 있습니다.

GDI 는 프로그램에서 사용한 논리적인 좌표(TextOut과 같은 함수에서 사용한 좌표)를 적당한 출력장치 좌표로 변환하기 위해서 맵핑모드를 사용합니다. GDI가 사용하는 기본적인 맵핑모드는 MM_TEXT 라는 모드이고, 이 모드에 사용한 1이라는 단위는 출력장치에서 한점(pixel, 화면에 찍히는 한점)을 의미합니다. 하지만 출력장치에 따라서 이 한점의 크기는 일정하지 않습니다. 또한 같은 장치라고 하더라도 해당 출력장치에 설정된 해상도(640*480, 800*600, ...)에 따라서 한점의 크기가 달라질수 있습니다.


3. 함수의 매개변수에 대한 설명

3.1 nMapMode

새롭게 설정할 맵핑모드값을 명시한다. 여기에 사용할수 있는 맵핑모드에 대한 상수 값은 아래와 같다.

3.1.1 MM_TEXT

GDI 함수에서 사용한 1의 단위가 출력장치에서 한점(1 pixel)을 의미하고 X축은 왼쪽에서
오른쪽으로 갈수록 값이 증가되고 Y축은 위쪽에서 아래쪽으로 갈수록 값이 증가된다.

3.1.2 MM_LOMETRIC

GDI 함수에서 사용한 1의 단위가 출력장치에서 0.1 mm를 의미하고 X축은 왼쪽에서 오른쪽으로 갈수록 값이 증가되고 Y축은 아래쪽에서 위쪽으로 갈수록 값이 증가된다.

3.1.3 MM_HIMETRIC

GDI 함수에서 사용한 1의 단위가 출력장치에서 0.01 mm를 의미하고 X축은 왼쪽에서 오른쪽으로 갈수록 값이 증가되고 Y축은 아래쪽에서 위쪽으로 갈수록 값이 증가된다.

3.1.4 MM_LOENGLISH

GDI 함수에서 사용한 1의 단위가 출력장치에서 0.01 인치(inch)를 의미하고 X축은 왼쪽에서
오른쪽으로 갈수록 값이 증가되고 Y축은 아래쪽에서 위쪽으로 갈수록 값이 증가된다.

3.1.5 MM_HIENGLISH

GDI 함수에서 사용한 1의 단위가 출력장치에서 0.001 인치(inch)를 의미하고 X축은 왼쪽에서
오른쪽으로 갈수록 값이 증가되고 Y축은 아래쪽에서 위쪽으로 갈수록 값이 증가된다.

3.1.6 MM_TWIPS

GDI 함수에서 사용한 1의 단위가 출력장치에서 0.0007 인치(inch)를 의미하고 X축은 왼쪽에서
오른쪽으로 갈수록 값이 증가되고 Y축은 아래쪽에서 위쪽으로 갈수록 값이 증가된다.
( 0.0007은 약식으로 표현한 값이고 실제로는 1/1440 인치(inch)가 정확한 값이다. )

3.1.7 MM_ISOTROPIC

GDI 함수에서 사용한 1의 단위가 출력장치에서 어떤 단위로 출력될것인지를 사용자가 마음데로
설정할수는 모드이고 값의 증가 방향또한 사용자가 정의할수 있다. 이 모드에서는 X축과
Y축에 대하여 배율을 동일하게 설정해야한다.

3.1.8 MM_ANISOTROPIC

GDI 함수에서 사용한 1의 단위가 출력장치에서 어떤 단위로 출력될것인지를 사용자가 마음데로
설정할수는 모드이고 값의 증가 방향또한 사용자가 정의할수 있다. 이 모드에서는 X축과
Y축에 대하여 배율을 다르게 설정할수 있다.




4. 함수의 반환값

이전에 사용하던 맵핑모드 값을 반환한다. 자신이 특정 맵핑모드로 변경하여 출력한 후에 다시 본래
사용하던 맵핑모드로 복구해야한다면 이 반환값을 저장해두었다가 작업이 끝난 후에 저장된 값을
이용하여 SetMapMode 함수를 호출하면 이전 맵핑모드로 복구할수 있다.



5. 함수 사용시 주의사항

MM_ISOTROPIC, MM_ANISOTROPIC 함수는 사용자가 논리적 단위에 장치 출력단위를 직접 정의할수 있습니다.
이 작업을 하기위해서는 SetWindowExt 또는 SetViewportExt 함수를 사용하면 됩니다. 일반적으로 배율개념이
적용되는 프로그램에서는 MM_ISOTROPIC 모드를 사용하면 좀더 쉽게 구현할수 있습니다.



6. 사용 예제

CClientDC dc(this);
// MM_LOENGLISH 모드를 사용하고 싶은 경우..
int old_mode = SetMapMode(MM_LOENGLISH); // old_mode 변수에는 이전에 사용하던 맵핑모드값이 저장된다.

출처 : http://www.tipssoft.com/bulletin/tb.php/FAQ/637

댓글 없음:

댓글 쓰기