160 likes | 448 Views
GDI 의 개념. Graphic Device Interface 윈도우가 하드웨어를 제어할 수 있도록 응용 프로그램에 제공하는 모든 기능 응용 프로그램과 디바이스 드라이버의 중간 역할 응용 프로그램에 대한 독립적인 그래픽 동작 수행. Device Context(DC) 의 개념. 일종의 핸들 애플리케이션과 출력 장치를 연결하는 역할 애플리케이션이 출력에 대한 허가를 얻고 , 또한 그려지는 영역을 결정하는 역활 GDI 에 의해 내부적으로 유지되는 데이터 구조 여러 가지 그래픽 속성에 대한 값을 가짐
E N D
GDI의 개념 • Graphic Device Interface • 윈도우가 하드웨어를 제어할 수 있도록 응용 프로그램에 제공하는 모든 기능 • 응용 프로그램과 디바이스 드라이버의 중간 역할 • 응용 프로그램에 대한 독립적인 그래픽 동작 수행
Device Context(DC)의 개념 • 일종의 핸들 • 애플리케이션과 출력 장치를 연결하는 역할 • 애플리케이션이 출력에 대한 허가를 얻고, 또한 그려지는 영역을 결정하는 역활 • GDI에 의해 내부적으로 유지되는 데이터 구조 • 여러 가지 그래픽 속성에 대한 값을 가짐 • Ex) 텍스트 속성/색상, 매핑 모드, 글꼴 • DC를 사용하는 이유 • 독립적인 하드웨어 출력을 할 수 있어 출력장치에 상관없이 동일한 방법으로 출력을 설정 • DC를 얻고 나면, 반드시 작업 완료시 해제
DC를 얻는 방법 • OnDraw()함수, OnPaint()함수를 이용 • OnDraw() 함수의 인자 - CDC 오브젝트 Void CPractice4_1View:: OnDraw(CDC * pDC) { … } • OnPaint() 함수 내의 CPaintDC 오브젝트 Void CPractice4_1View::OnPaint() { CPaintDC dc(this) … } • 윈도우나 클라이언트 영역이 다시 그려져야 할 경우 수행 • DC의 해제는 MFC 내부 코드에 존재한다.
DC를 얻는 방법 • GetDC() 함수의 이용 • 이 함수의 포인터 반환값을 받아서 사용 • ReleaseDC()함수를 호출하여 반드시 해제 • 사용 예 CDC *pDC = GetDC(); … ReleaseDC(pDC); • 이 방법으로 DC를 얻는 것은 일시적인 것으로 윈도우의 크기가 변하면 출력한 내용이 사라진다.
DC를 얻는 방법 • CClientDC 클래스의 이용 • CDC 클래스의 파생 클래스 • Device Context의 생성/해제 자동적 수행 • 생성자 함수에서 GetDC()함수를 호출 • 소멸자 함수에서 ReleaseDC()함수를 호출 • 윈도우에 대한 핸들값이 필요 • 일시적으로 윈도우의 클라이언트 영역에서 그래픽 개체를 사용할 경우에 이용 • 사용 예 CClientDC dc(this) …
DC를 얻는 방법 • CWindowDC를 이용 • 윈도우(프레임) 영역에 그래픽 요소를 출력하고자 할 때 사용한다. • GetWindowDC()함수를 이용하여 CWindowDC 클래스의 인스턴스를 포인터 형태로 넘겨 받아 이용 • 작업 수행 후, ReleaseDC()함수로 해제 • 사용 예 CWindowDC *pDC = GetWindowDC(); … ReleaseDC();
GDI 객체 • GDI 기본 구성 요소 • 선과 곡선(Lines and Curves) • 직선, 사각형, 타원, 호, 베지어 곡선 • 채워진 영역(Filled Areas) • 브러시 개체를 이용 –색상, 패턴, 비트맵 이미지 • 비트맵(Bitmaps) • 디스플레이 장치의 픽셀과 일치하는 직사각형 배열 • 래스터 그래픽의 기본적인 도구 • 텍스트(Text)
GDI 객체 • 화면에 그래픽 출력하기위한 요소
GDI 객체 • 객체를 사용하는 방법 ① GDI 객체를 생성 • Create계열 함수 이용 ② 객체를 Device Context에 등록 • SelectObject()함수이용 • 기존 설정된 객체는 포인터로 저장 ③ Device Context를 사용하여 그래픽 출력 ④ 이전 객체로 환원 ⑤ 객체를 삭제 • DeleteObject()함수 이용
GDI 객체 • 펜(Pen) • 선이나 영역의 경계선을 그릴 때 사용 • 선의 두께, 선이 색상, 선의 스타일 설정 • 펜의 사용하는 방법 ① CPen pen *oldpen pen.CreatePen(PS_SOLID, 1,RGB(0,0,0)); ② oldpen=pDC->SelectObject(&pen); ③ pDC->Ellipse(0,0,10,10); ④ pDC->SelectObject(oldpen); ⑤ pen.DeleteObject();
GDI 객체 • CreatePen() 함수 • CreatePen() 함수는Pen을 생성하는 함수로 원형은 다음과 같다. BOOL CreatePen(int nPenStyle, int nWidth, COLORREF crColor); • nPenStyle : 펜의 스타일 • nWidth : 펜의 굵기 • crColor : 펜의 색상
GDI 객체 • 펜의 스타일
GDI 객체 • 브러시(Brush) • 영역의 내부를 채울 때 사용 • 채울 색, 패턴등이 사용 • 브러시 사용하는 방법 ① CBrush brush *oldbrush brush.CreateSolidBrush(RGB(0,0,0)); brush.CreateHatchBrush(HS_CROSS,RGB(0,0,0)); ② oldbrush=pDC->SelectObject(&brush); ③ pDC->Ellipse(0,0,10,10); ④ pDC->SelectObject(oldbrush); ⑤ brush.DeleteObject();
GDI 객체 • CreateSolidBrush() 함수 • 단일 색으로 칠하는 브러시를 생성하는 함수 • CreateHatchBrush() 함수 • 일정한 패턴을 가진 해치 브러시를 생성하는 함수. • 해치 브러쉬의 스타일
그래픽 함수 • 선그리기 • MoveTo(int x, int y) 함수 • LineTo(int x, int y)함수 • 사각형 그리기 • Rectangle(int x1, int y1, int x2, int y2) • 원 그리기 • Ellipse(int x1, int y1, int x2, int y2) • 다각형 그리기 • Polyline(LPPOINT lpPoints, int nCount) • Polygon(LPPOINT lpPoints, int nCount) • 베지어 곡선 그리기 • PolyBezier(const POINT* lpPoints, int nCount)
실습문제 5-1 실행 화면 • 그래픽 객체를 이용한 그리기