출처 : http://blog.naver.com/gml81/40037809685
MapWindowPoints : CWnd의 좌표계로부터 다른 윈도우의 좌표계로 지정된 점들을 매핑시 킨다.
ClientToSreen : 클라이언트 좌표계를 화면 좌표계로 변환한다.
ScreenToClient : 화면 좌표계를 클라이언트 좌표계로 변환한다.
-----------------------------------------------------------------------------
OnPrepareDC()에서
dc.SetMapMode(MM_ISOTROPIC);
dc.SetWindowExt(1000,1000);
dc.SetViewportExt(2000,2000);
CClientDC dc (this);
OnPrepareDC (&dc);
dc.DPtoLP (&point);
point가 마우스 좌표라면 논리 좌표로 변환해 주는 코드입니다.
----------------------------------------------------------------------------------
jpg 이미지가 255*255 픽셀 크기인데요...
출력을하면은 255*255 크기가 아니고 적게 출력이 되는데.
무슨 이유입니까??
좌표계가 MM_TEXT로 설정되어 있어서 그럴겁니다
MM_TEXT 좌표계는 하나의 픽셀이 기준이 됩니다
질문하셨다 시피 jpg 이미지가 255*255 크기라면
좀 픽셀이 큰 모니터에서는 이미지가 더 크게 나오겠죠?
출력을 할때도 마찬가지로
프린터 장치의 dpi라고 하죠 1인치 사각형안에 얼마나 많은 점들을 찍을수 있느냐 하는 건데
(보통 300dpi 뭐 이런 얘기 많이 들어보셨을 겁니다)
이 프린터의 dpi에 따라 이미지 사진이 더 크게나올수도 있고 작게나올수도 있는겁니다
왜냐하면 기준이 픽셀이기 때문이죠
그럼 화면과 출력물의 크기가 같아지기 위해서는 어떻게 해야하느냐 하면
MM_LOMETRIC같은 좌표계를 쓰시는 겁니다
MM_LOMETRIC은 자표계 기준이 0.1미리 입니다
따라서 MM_LOMETRIC좌표계 기준으로 1000*1000의 그림은
화면에서나 출력에서나 10cm * 10cm로 동일하게 출력되는 것이죠
쉽게 말씀드리면
SetMapMode() 함수를 이용해서 좌표계를 바꿔주라는 이야기 입니다 ^^
SetMapMode(hPrinterDC, MM_LOMETRIC); // 이런식으로요
물론 출력하실때 좌표계가 바뀌었으니 출력될 좌표는 신경쓰셔야 겠죠 ^^
참고로 MM_LOMETRIC은 MM_TEXT와는 달리
y축이 아래로 가면 - 값 입니다
덧붙이자면
BOOL DPtoLP() // 디바이스 좌표를 로직좌표계로 바꿔주는 함수와 그 반대 함수들이 존재하니 참고 하시구요
-----------------------------------------------------------------------
DPtoLP는 함수 이름 대로 디바이스 좌표를 논리적 좌표로 변경해주는 함수입니다...
디바이스 좌표는 화면의 한 Pixel, 프린터의 한 Dot를 뜻합니다.
논리적 좌표는 논리적으로 단위를 정한 좌표입니다.(예로 10cm단위로 1, 2, 3...)
일반적으로 GetDC()를 하게 되면 리턴되는 DC는 MM_TEXT 모드가 됩니다.
MM_TEXT는 디바이스 좌표와 논리 좌표가 1:1 대응(화면의 한 점이 1이 됩니다.)됩니다.
결국 DPtoLP를 해도 값의 변화가 없겠죠...
하지만 map mode를 MM_HIMETRIC으로 변경했다고 가정하면 논리적 좌표 1은
0.01mm를 나타내기 때문에 화면의 한 pixel은 화면 DPI에 따라 1이 아닌 다른 논리적 값이 됩니다...
'C/C++언어 > 윈도우 MFC' 카테고리의 다른 글
[MFC] 디렉토리 선택 가능한 대화상자(SHBrowseForFolder) (0) | 2010.07.04 |
---|---|
GetWindowRect, GetClientRect, ScreenToClient (0) | 2008.09.26 |
리스트뷰 컨트롤에 관련한 이야기 (0) | 2007.11.15 |
MFC클래스 간의 통신 (포인터 얻기) (0) | 2007.11.11 |
스크롤 범위 세팅 (0) | 2007.11.11 |