GDI의 개념

Download Report

Transcript GDI의 개념

GDI의 개념

Graphic Device Interface



윈도우가 하드웨어를 제어할 수 있도록 응용 프로
그램에 제공하는 모든 기능
응용 프로그램과 디바이스 드라이버의 중간 역할
응용 프로그램에 대한 독립적인 그래픽 동작 수행
컴퓨터정보과
Windows
Windows
Device
DeviceDriver
Driver
Program
Program
Device
Device
1
Device Context(DC)의 개념

일종의 핸들



GDI에 의해 내부적으로 유지되는 데이터 구조



여러 가지 그래픽 속성에 대한 값을 가짐
Ex) 텍스트 속성/색상, 매핑 모드, 글꼴
DC를 사용하는 이유


애플리케이션과 출력 장치를 연결하는 역할
애플리케이션이 출력에 대한 허가를 얻고, 또한 그려
지는 영역을 결정하는 역활
독립적인 하드웨어 출력을 할 수 있어 출력장치에 상
관없이 동일한 방법으로 출력을 설정
DC를
얻고 나면, 반드시
작업 완료시 해제
컴퓨터정보과
2
DC를 얻는 방법

OnDraw()함수, OnPaint()함수를 이용

OnDraw() 함수의 인자 - CDC 오브젝트
Void CPractice4_1View:: OnDraw(CDC * pDC)
{
…
}

OnPaint() 함수 내의 CPaintDC 오브젝트
Void CPractice4_1View::OnPaint()
{
CPaintDC dc(this)
…
}


윈도우나 클라이언트 영역이 다시 그려져야 할 경우 수행
DC의 해제는 MFC 내부 코드에 존재한다.
컴퓨터정보과
3
DC를 얻는 방법

GetDC() 함수의 이용



이 함수의 포인터 반환값을 받아서 사용
ReleaseDC()함수를 호출하여 반드시 해제
사용 예
CDC *pDC = GetDC();
…
ReleaseDC(pDC);

이 방법으로 DC를 얻는 것은 일시적인 것으로 윈
도우의 크기가 변하면 출력한 내용이 사라진다.
컴퓨터정보과
4
DC를 얻는 방법

CClientDC 클래스의 이용


CDC 클래스의 파생 클래스
Device Context의 생성/해제 자동적 수행





생성자 함수에서 GetDC()함수를 호출
소멸자 함수에서 ReleaseDC()함수를 호출
윈도우에 대한 핸들값이 필요
일시적으로 윈도우의 클라이언트 영역에서 그래픽
개체를 사용할 경우에 이용
사용 예
CClientDC dc(this)
…
컴퓨터정보과
5
DC를 얻는 방법

CWindowDC를 이용




윈도우(프레임) 영역에 그래픽 요소를 출력하고자
할 때 사용한다.
GetWindowDC()함수를 이용하여 CWindowDC 클
래스의 인스턴스를 포인터 형태로 넘겨 받아 이용
작업 수행 후, ReleaseDC()함수로 해제
사용 예
CWindowDC *pDC = GetWindowDC();
…
ReleaseDC();
컴퓨터정보과
6
GDI 객체

GDI 기본 구성 요소

선과 곡선(Lines and Curves)


채워진 영역(Filled Areas)


브러시 개체를 이용 – 색상, 패턴, 비트맵 이미지
비트맵(Bitmaps)



직선, 사각형, 타원, 호, 베지어 곡선
디스플레이 장치의 픽셀과 일치하는 직사각형 배열
래스터 그래픽의 기본적인 도구
텍스트(Text)
컴퓨터정보과
7
GDI 객체

화면에 그래픽 출력하기위한 요소
GDI 객체
GDI 객체 클래스
기본값
사용 용도
펜
CPen
검정색, 실선, 1픽셀 크기
점, 선, 테두리
브러시
CBrush
무늬없는 흰색
내부(영역) 채우기
폰트
CFont
시스템 폰트
문자의 폰트
비트맵
CBitmap
없음
비트맵 출력
영역
CRgn
없음
영역 만들기, 변경
하기
팔레트
CPalette
없음
팔레트 조작
컴퓨터정보과
8
GDI 객체

객체를 사용하는 방법
① GDI 객체를 생성

Create계열 함수 이용
② 객체를 Device Context에 등록


SelectObject()함수이용
기존 설정된 객체는 포인터로 저장
③ Device Context를 사용하여 그래픽 출력
④ 이전 객체로 환원
⑤ 객체를 삭제

컴퓨터정보과
DeleteObject()함수 이용
9
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();
컴퓨터정보과
10
GDI 객체

CreatePen() 함수
 CreatePen() 함수는 Pen을 생성하는 함수
로 원형은 다음과 같다.
BOOL CreatePen(int nPenStyle, int nWidth,
COLORREF crColor);



컴퓨터정보과
nPenStyle : 펜의 스타일
nWidth : 펜의 굵기
crColor : 펜의 색상
11
GDI 객체

펜의 스타일
펜의 스타일
내용
PS_SOLID
실선
PS_DASH
파선
PS_DOT
점선
PS_DASHDOT
일점 쇄선
PS_DASHDOTDOT
이점 쇄선
PS_NULL
선을 그리지 않음
컴퓨터정보과
12
모양
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();
컴퓨터정보과
13
GDI 객체

CreateSolidBrush() 함수


단일 색으로 칠하는 브러시를 생성하는 함수
CreateHatchBrush() 함수


일정한 패턴을 가진 해치 브러시를 생성하는 함수.
해치 브러쉬의 스타일
해치 브러시의 스타일
내용
HS_BDIAGONAL
오른쪽에서 왼쪽으로 45도 내려가는 빗금
HS_CROSS
십자가 형태의 빗금
HS_DIAGCROSS
X자 형태의 빗금
HS_FDIAGONAL
왼쪽에서 오른쪽으로 45도 내려가는 빗금
HS_HORIZONTAL
수평으로 빗금
HS_VERTICAL
컴퓨터정보과
수직으로 빗금
14
모양
그래픽 함수

선그리기



사각형 그리기


Ellipse(int x1, int y1, int x2, int y2)
다각형 그리기



Rectangle(int x1, int y1, int x2, int y2)
원 그리기


MoveTo(int x, int y) 함수
LineTo(int x, int y)함수
Polyline(LPPOINT lpPoints, int nCount)
Polygon(LPPOINT lpPoints, int nCount)
베지어 곡선 그리기

PolyBezier(const POINT* lpPoints, int nCount)
컴퓨터정보과
15
실습문제 5-1 실행 화면

그래픽 객체를 이용한 그리기
컴퓨터정보과
16