임펠리테리입니다.
오늘은 TRect, RECT 구조체와 관련된 내용들을 긁어모아봅시다.
TRect를 헬프에서 뒤져보면, 실제의 데이터멤버인 Left, Top, Right, Bottom은 왼쪽
위 좌표인 TopLeft와 오른쪽아래 좌표인 BottomRight와 유니언으로 되어있습니다.
그래서 만약 TRect r; 과 같이 정의했다면, r.TopLeft는 이 사각형 영역의 왼쪽위
좌표를 나타내는 TPoint형 객체입니다.
지정된 좌표로 TRect형 구조체 객체를 얻는 데 가장 많이 쓰이는 함수는 vcl 함수
Rect()입니다.left, top, right, bottom 값을 받아서 TRect형 구조체를 돌려줍니다.
이것은 Point() 함수가 x, y 값을 받아서 TPoint형 구조체를 돌려주는 것과 마찬가
지입니다.
이와 비슷하게 left, top, width, height 값으로 TRect형 구조체를 받아올 수 있는
함수는 vcl 함수 Bounds()입니다. 네개의 값을 넣어주면 TRect형으로 돌려줍니다.
width와 height로 지정하므로 무식하게 width = right - left; 이렇게 계산하는 것
보단 더 편리하겠죠.
컨트롤들은 TControl::BoundsRect 프로퍼티로 그 사각형 영역을 알아내거나 거꾸로
영역을 지정할 수 있습니다. TControl::SetBounds() 함수가 left, top, width,
height 등으로 좌표를 지정하는 것과 좋은 비교가 되죠.
만약 TRect r = Rect(10, 10, 400, 350); 이라고 선언된 r의 좌표대로 폼의 좌표를
맞추려면 this->BoundsRect = r; 이라고만 하면 됩니다. (this->~ 라고 한 것은
그냥 이 코드가 폼 상에 있음을 강조하려고 한거죠..)
TRect형은 윈도우즈의 RECT형과 상호 호환이 되죠. 그래서 RECT 형을 다루는 많은
API 함수들을 그대로 사용할 수 있습니다. InflateRect() 함수는 지정된 x, y만큼
넓이/높이를 증가/감소시켜줍니다. 이와 비슷하게 OffsetRect() 함수는 위치를
지정해준 만큼 옮겨(move)줍니다. UnionRect()를 사용하면 두 RECT형 좌표가 공유하
는 영역을 돌려줍니다.
PtInRect() 함수는 한 점이 RECT형 영역내에 있는지를 알려주는 불린형 함수입니다.
요긴하게 쓰이죠.
쩝... 너무 피곤해서.. 별도로 팁을 준비하기가 힘들어 그냥 떠오르는대로 주절거려
봤습니다. 하지만, 생각보단 쓸만하겠죠? ^^;;;
그럼 이만... (자야지.. 쿨....)
독립문에서 임펠리테리였습니다.
|