Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- protobuf-c
- .net
- EUC-KR
- net
- 기념일관리
- 블루투스 헤드셋
- crashlog
- PDA
- C#
- C/C++
- docker
- 한 번만 실행
- 크래시로그
- php
- 자바스크립트
- GDI
- MFC
- 데이터 전달
- phpmailer
- plcrashreporter
- Antialiasing
- 와이브로
- Font
- M8200
- ClickOnce
- 설치제거
- JavaScript
- self-signed ssl
- VS2008
- API
Archives
- Today
- Total
~☆~ 우하하!!~ 개발블로그
MFC CRect 클래스의 IntersectRect 함수에 대해서 본문
반응형
MFC의 CRect 클래스는 left, top, right, bottom 등의 네 개 포인트 좌표점을 멤버로 가진다.
네 개의 포인트 좌표점은 사각 영역을 구성하기 위한 요소이다.
left와 right 는 X 좌표축에 대한 위치값이고, top, bottom 은 Y 좌표축에 대한 위치값이다.
IntersectRect 함수는 두 개의 CRect 클래스형 인스턴스에 대해서 동작한다.
IntersectRect 함수는 두 개의 파라미터를 필요로 하는데, 이 중 앞의 파라미터로 전달된 CRect 영역과 뒤의 파라미터로 전달된 CRect 영역이 교차되는 영역을 구한다.
CRect::IntersectRect
다음 세 가지 케이스는 IntersectRect 의 동작을 확인하기 위한 케이스이다.
각 케이스마다 두 개의 사각 영역이 사용된다. 각 케이스는
① 큰 영역이 작은 영역을 완전히 포함하고 있는 경우,
② 큰 영역과 작은 영역의 일부가 겹치는 경우,
③ 큰 영역과 작은 영역이 전혀 겹치지 않는 경우
이다.
세 가지 케이스에 대해서 IntersectRect 함수를 사용한 예제코드는 다음과 같다.
① 큰 영역이 작은 영역을 완전히 포함하고 있는 경우,
② 큰 영역과 작은 영역의 일부가 겹치는 경우,
③ 큰 영역과 작은 영역이 전혀 겹치지 않는 경우
각 케이스에서 눈여겨봐야 할 결과값은 bResult 와 rectDiff 의 값이다.
첫 번째 케이스의 경우 큰 영역이 작은 영역을 포함한다.
이 경우 IntersectRect 함수의 리턴값 bResult 는 TRUE이다. 즉, 함수 실행이 성공하였음을 의미한다.
rectDiff 의 값은 left, top, right, bottom 의 순서대로 20, 20, 80, 80 이다. 이 값은 두 번째 파라미터로 전달된 작은 사각 영역의 좌표값과 같은 값이다.
즉 첫 번째 파라미터로 전달된 큰 범위의 영역과 두 번째 파라미터로 전달된 작은 범위의 영역이 서로 교차된 영역인 작은 범위의 사각 영역이 구해지는 것이다.
두 번째 케이스는 두 사각 영역의 일부만이 겹쳐진 형태이다.
이 경우 IntersectRect 함수의 리턴값은 TRUE이다. 역시 함수 실행이 성공하였음을 의미한다.
rectDiff 의 값은 left, top, right, bottom 의 순서대로 20, 80, 80, 100 이다. 이 값은 아래 그림에서 확인할 수 있듯이 겹친 영역이다.
세 번째 케이스는 두 사각 영역이 전혀 겹치지 않는 경우이다.
이 경우 IntersectRect 함수의 리턴값은 FALSE 이다. 즉 함수 실행이 실패하였음을 의미한다.
rectDiff 의 값은 0, 0, 0, 0 이다. 이 경우 rectDiff.IsRectEmpty() 또는 rectDiff.IsRectNull() 함수의 리턴값은 TRUE 이다.
세 번째 케이스에서와 같이 겹치는 영역이 존재하지 않는 경우를 확인할 수 있는 방법은
IntersectRect 함수의 리턴값이 FALSE 인 경우를 확인하거나
IsRectEmpty 또는 IsRectNull 함수를 사용하여 IntersectRect 함수의 실행으로 구해진 사각 영역이 비어있음을 확인하는 것이다.
네 개의 포인트 좌표점은 사각 영역을 구성하기 위한 요소이다.
left와 right 는 X 좌표축에 대한 위치값이고, top, bottom 은 Y 좌표축에 대한 위치값이다.
IntersectRect 함수는 두 개의 CRect 클래스형 인스턴스에 대해서 동작한다.
IntersectRect 함수는 두 개의 파라미터를 필요로 하는데, 이 중 앞의 파라미터로 전달된 CRect 영역과 뒤의 파라미터로 전달된 CRect 영역이 교차되는 영역을 구한다.
CRect::IntersectRect
BOOL IntersectRect( LPCRECT lpRect1, LPCRECT lpRect2 );
intersect 는 사전적 의미로 <선, 면 등이> 교차하다, 엇갈리다 라는 뜻을 가지고 있다.다음 세 가지 케이스는 IntersectRect 의 동작을 확인하기 위한 케이스이다.
각 케이스마다 두 개의 사각 영역이 사용된다. 각 케이스는
① 큰 영역이 작은 영역을 완전히 포함하고 있는 경우,
② 큰 영역과 작은 영역의 일부가 겹치는 경우,
③ 큰 영역과 작은 영역이 전혀 겹치지 않는 경우
이다.
세 가지 케이스에 대해서 IntersectRect 함수를 사용한 예제코드는 다음과 같다.
① 큰 영역이 작은 영역을 완전히 포함하고 있는 경우,
② 큰 영역과 작은 영역의 일부가 겹치는 경우,
③ 큰 영역과 작은 영역이 전혀 겹치지 않는 경우
각 케이스에서 눈여겨봐야 할 결과값은 bResult 와 rectDiff 의 값이다.
첫 번째 케이스의 경우 큰 영역이 작은 영역을 포함한다.
이 경우 IntersectRect 함수의 리턴값 bResult 는 TRUE이다. 즉, 함수 실행이 성공하였음을 의미한다.
rectDiff 의 값은 left, top, right, bottom 의 순서대로 20, 20, 80, 80 이다. 이 값은 두 번째 파라미터로 전달된 작은 사각 영역의 좌표값과 같은 값이다.
즉 첫 번째 파라미터로 전달된 큰 범위의 영역과 두 번째 파라미터로 전달된 작은 범위의 영역이 서로 교차된 영역인 작은 범위의 사각 영역이 구해지는 것이다.
두 번째 케이스는 두 사각 영역의 일부만이 겹쳐진 형태이다.
이 경우 IntersectRect 함수의 리턴값은 TRUE이다. 역시 함수 실행이 성공하였음을 의미한다.
rectDiff 의 값은 left, top, right, bottom 의 순서대로 20, 80, 80, 100 이다. 이 값은 아래 그림에서 확인할 수 있듯이 겹친 영역이다.
세 번째 케이스는 두 사각 영역이 전혀 겹치지 않는 경우이다.
이 경우 IntersectRect 함수의 리턴값은 FALSE 이다. 즉 함수 실행이 실패하였음을 의미한다.
rectDiff 의 값은 0, 0, 0, 0 이다. 이 경우 rectDiff.IsRectEmpty() 또는 rectDiff.IsRectNull() 함수의 리턴값은 TRUE 이다.
세 번째 케이스에서와 같이 겹치는 영역이 존재하지 않는 경우를 확인할 수 있는 방법은
IntersectRect 함수의 리턴값이 FALSE 인 경우를 확인하거나
IsRectEmpty 또는 IsRectNull 함수를 사용하여 IntersectRect 함수의 실행으로 구해진 사각 영역이 비어있음을 확인하는 것이다.
반응형
'MFC' 카테고리의 다른 글
[MFC] 특정 문자로 끝나는지 확인하는 방법 (0) | 2009.07.16 |
---|---|
[프로그램] 아스키(ASCII/EUC-KR) 파일을 UTF-8 로 인코딩 (35) | 2009.02.12 |
TRACE (ANSI vs UNICODE) (0) | 2008.12.10 |
MFC 4.x 와 MFC 9.x 의 차이점 (스핀컨트롤 CreateEx) (0) | 2008.12.05 |
메시지를 통해서 double 형 값을 전달하는 방법 (0) | 2008.11.25 |