Contents

Develop
2013.04.23 14:51

[c] 윈도우 API Viewport와 Window

조회 수 5956 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
디바이스 좌표를 가지고 있는 어떤 좌표 평면의 영역이을 Viewport라고 하고 로직좌표를 가지고 있는 어떤 좌표 평면을 Window라고 한다.
이런 개념을 쓰는 이유는 좌표 평면의 정보를 수정하고자 할경우가 있기 때문이다.
그림의 (a)처럼  MM_TEXT에서는 좌측 상단 이 (0,0)의 초기점이다. 이때 때로는 화면 영역의 중앙이 (0,0)으로 하고자 할경우가 있다 그림의 (b)처럼 말이다. 이럴 경우 SetWindowOrgEx라는 함수를 사용하여 이동시킬수 있다.

viewport.gif

BOOL SetWindowOrgEx(
    HDC hdc, // 디바이스 컨텍스 핸들
    int X, // 이동 X좌표
    int Y, // 이동 Y좌표
    LPPOINT lpPoint // 이전 좌표
);

예를 들어 화면의 현재 전체 영역이 (400,400)이라고 가정을 하고 (b)같은 좌표로 전환하고자 할 경우 다음과 같이 할수 있다.

SetWindowOrgEx(hdc,200,200,NULL);

SetWindowOrg라는 함수는 로직 좌표계에서 초기 좌표를 이동하는 함수이다.
전항목에서 좌표계를 디바이스 좌표계와 로직좌표계 두 개를 사용한다고 하였습니다.
SetWindowOrg함수에 의해서 로직 좌표계의 좌표원점이 이동하였다하여도 디바이스 좌표계의 원점이 이동되는 것은 아닙니다.
다바이스 좌표계의 원점을 이동하고자 한다면 SetViewportOrgEx라는 함수를 사용한다.

BOOL SetViewportOrgEx(
    HDC hdc, // 디바이스 컨텍스 핸들
    int X, // 이동 X좌표
    int Y, // 이동 Y좌표
    LPPOINT lpPoint // 이전 좌표
);

MM_LOMETRIC 로 맵핑모드를 설정하고 로직좌표와 디바이스좌표 중앙에 원점을 설정하고자 한다면 다음과 같은 형식이 될것이다.

1) 클라이언트 전체 영역을 얻는다.
   GetClientRect(hwnd,&rect)
    
2) rect좌표는 dc와 상관되는 좌표가 아닙니다. 이좌표는 디바이스 좌표이다.
   디바이스좌표를 이용하여 원점을 이동하는 함수가 SetViewportOrg이므로
SetViewportOrgEx(hdc,rect.right/2,rect.bottom/2,NULL);

3) 이제 rect를 로직좌표로 전환을 하고 로직좌표계의 원점을 이동한다.
DPtoLP(hdc,(PPOINT)&rect,2);
SetWindowOrgEx(hdc,rec,right/2,rect.bottom/2,NULL);

좌표를 리턴하는 함수들중에 디바이스 좌표만 리턴하는 경우의 함수들이 있다.
위의 예에서 보듯이 GetClientRect함수는 dc에서 얻는 함수가 아니기 때문에 디바이스 좌표를 리턴한다.
이외에 GetDeviceCaps라는 함수는 DC를 이용하지만 로직좌표계가 아닌 디바이스좌표를 리턴한다.
프로그래밍 할 경우 특정 맵핑모드를 선언하였을 경우 함수가 디바이스좌표를 리턴하는가? 또는 로직좌표를 리턴하는가에 대해서 주의를 해주어야 한다.
좌표평면 정보를 수정할 경우 어떤 좌표평면을 수정할것인가를 알려주어야 하기 때문에 디바이스 좌표평면을 보통 Viewport라고하며 로직좌표 평면을 Window라고 한다.


?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
1173 Develop [ios] 아이폰용 앱 오픈 소스들 hooni 2013.04.23 466229
1172 Develop [ios] 언어, 지역, 국가 설정 가져오기 hooni 2014.05.12 269346
1171 Develop 자주 쓰는 Docker 명령어 alias hooni 2020.01.10 268704
1170 Etc 베지어 곡선 (Bezier curve) file hooni 2013.08.18 220311
1169 Develop [ios] Start developing your navigation app for CarPlay without enrollment file hooni 2020.02.22 124612
1168 Develop [android] 만화 어플 소스코드 file hooni 2013.04.23 92833
1167 Develop 레고 마인드스톰 NXT 수도쿠, 큐브 소스코드.. 20 file hooni 2013.04.23 81376
1166 Algorithm 디피헬만(Diffie-Hellman) 초간단 개념.. hooni 2013.04.23 81016
1165 Develop [c#] Hashtable <-> Json (dll 포함) file hooni 2013.04.23 80649
1164 Develop [C#] MD5, SHA1 해시 & 인코딩 hooni 2013.04.23 77851
1163 Develop [android] 점심 해결 앱 소스 코드 ㅋㅋ file hooni 2013.04.23 76393
1162 PPT [android] XML파서(XMLParser)의 종류와 성능 비교에 대한 발표 자료 file hooni 2013.04.23 75632
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 98 Next
/ 98