200 likes | 431 Views
Windows Programming 제대로 배우기. Chapter 6. GDI Objects. 학습 목표. 목표 화면에 이동하는 오브젝트 구현 학습 단계 DC(Device Context) 와 GDI Object GDI Objects and Selecting 화면에 이동하는 오브젝트 구현 방법. DC(Device Context) 와 GDI Object. DC 란 무엇인가 ? 지금까지 모든 출력문들은 모두 hdc 가 사용됨 TextOut(hdc, 0, 0, temp, strlen(temp));
E N D
Windows Programming제대로 배우기 Chapter 6. GDI Objects
학습 목표 목표 화면에 이동하는 오브젝트 구현 학습 단계 • DC(Device Context)와 GDI Object • GDI Objects and Selecting • 화면에 이동하는 오브젝트 구현 방법
DC(Device Context)와 GDI Object • DC란 무엇인가? • 지금까지 모든 출력문들은 모두 hdc가 사용됨 • TextOut(hdc, 0, 0, temp, strlen(temp)); • LineTo(hdc, 120, 20); • Rectangle(hdc, 0, 0, 100, 100); • 왜 DC라는 핸들을 사용할까?
hWnd hdc • 윈도우는 View를 형성하는 하나의 Frame(틀)일뿐이며, DC가 직접적(논리적)인 출력대상임 • DC에는 현재의 DC에 설정된 Pen의 정보(펜스타일, 굵기, 색상)나, Brush의 정보, Font 정보 및 해상도에 관한 정보 지님
hWnd hdc • 윈도우는 하나의 Frame이며, DC는 간단히 그 뒤에 그려지는 도화지 • GDI Object란 그림을 그리는 데 필요한 각 도구 (펜, 브러쉬, 폰트, 비트맵) 등을 의미 • 논리적으로 DC는 윈도우 내에 존재하며, 윈도우는 기본적으로 하나의 DC를 갖고 있음 • 모든 직접적인 출력문에는 DC가 요구됨
GDI Objects and Selecting • GDI(Graphic Device Interface) Object란 • 그림을 그리는 데 필요한 도구 • (예) 펜, 브러쉬 • 사용개념 • 원하는 색을 선택한다 • 그림을 그린다 • 원래있던 색으로 다시 원위치 시킨다 • RGB의 조합으로 색상만듬
색을 선택하는 과정 • 색펜을 만든다 • 그 색을 선택한다 • 그림을 그린다 • 원래있던 펜으로 원위치 시킨다 • 사용했던 펜을 버린다 • 함수 이용하는 과정 • CreatePen으로 펜을 만든다 • 새로 만든 펜을 SelectObject한다 • 출력한다 • 원래의 펜으로 다시 SelectObject한다 • DeleteObject로 새로 만들었던 펜을 삭제한다
실제 함수 코딩 • hPen = CreatePen(PS_SOLID, 1, RGB(0,255,0)); • hOldPen = (HPEN) SelectObject(hdc, hPen); • Rectangle(hdc, m_Rect.left, m_Rect.top, m_Rect.right, m_Rect.bottom); • SelectObject(hdc, hOldPen); • DeleteObject(hPen);
CreatePen함수의 ProtoType HPEN CreatePen( Int fnPenStyle, Int nWidth, COLORREF crColor ); PenStyle의 종류 • PS_SOLID • PS_DASH • PS_DOT • PS_DASHDOT
hOldPen = (HPEN) SelectObject(hdc, hPen); • 이전에 설정되어 있던 Object를 반환하여 주므로, 이를 받아놓아 나중에 원위치시키는 데 사용 • 정확한 Type으로 반환받기 위해 Type-Casting한다
브러쉬는 스타일을 속성으로 지정하는대신 여러 가지 함수 제공 • CreateSolidBrush • CreateHatchBrush • CreatePatternBrush
예제분석-MoveRect-with Color • Timer를 이용하여 사각형을 윈도우 내부에서 좌우로 왔다갔다하는 프로그램작성 • 움직이는 사각형은 윈도우의 좌,우에 부딪히면 방향을 반대로 바꾼다
신호등을 시물레이트하는 프로그램예제분석-Traffic Signal • - 신호등을 빨간색, 녹색, 노란색 등이 • 순차적으로 켜지게 됨 • 맨 위의 빨간색을 위한 Rect를 적당히 • 설정 후 OffsetRect로 나머지 Rect를 • 잡아줌 • Rect가 모두 3개가 필요하먀, Color는 • 배경색 3개, 전경색 3개 각각 필요 • - Lamp가 켜지는 순서는 1-3-2의 순임
Lamp의 3개의 영역 배경색 전경색
// 윈도우 전체 영역 얻어옴 : r R // r을 전체 –10 Pixel만큼 안쪽으로 줄임 // r의 bottom을 1/3로 줄임 이 Rect r를 계속 아래로 Offset시키면서 각 배열에 넣어줌 0,1,2 라운드 토글