Lecture 3 Graphics with GDI

Slides:



Advertisements
Similar presentations
Computer Graphics 1 윈도우 프로그래밍 실습 II 김 창 헌김 창 헌.
Advertisements

CH5 디버그를 해보자 디버그 디버거 : 실행중인 응용 프로그램을 지정한 장소에서 정지하고, 그 시 점에서 변수, 메모리, 콜 스택의 내용을 참조하는것이 가능 Build -> Start Debug -> Go.
CH1 개발 효율이 높은 프로그램 구조
직장내 성희롱, 성폭력, 성매매 예방연수.
아름다운 이들의 행복한 길음안나의 집.
2장. 윈도우즈 입출력 1/211 1.
Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel:
Visual C++ Programming
제 11 장 구조체.
Visual C download - Visual Studio Team System 2008 Team Suite (90-days Trial)
Windows Programming Chapter 1. Introduction to SDK
윈도우 운영체제와 윈도우 응용 프로그램의 특징을 이해한다.
C++ Espresso 제1장 기초 사항.
Visual C++ Programming Dialog Box
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
제1장 윈도우 프로그래밍 1.1 윈도우 프로그래밍의 개념 1.2 윈도우 프로그램의 기본 구조
Visual C++ Programming Document/View Architecture 3
5장. 단축키와 비트맵 윈도우 프로그램에는 화면에서 사용자들의 입력을 받아 들이고 출력을 위한 코드 외 부분이 존재한다. 이 부분을 주로 리소스라고 부르고 이들은 주로 화면에 나타난다. 메뉴, 툴바, 비트맵, 단축키, 대화상자 등이 여기에 속한다. 이 부분들은 우리의 프로그램의.
윈도우의 화면 출력 원리를 이해한다. CDC 클래스를 이용한 화면 출력 기법을 배운다.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express Slide 1 (of 25)
MFC 발전 과정과 주요 특징을 개괄적으로 이해한다.
Department of Digital Contents Sang Il Park
1장. 디지털 영상처리의 개념(3) 임은경 2주차 - 디지털영상처리의개념.
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
공통 컨트롤의 종류와 특징을 개관한다. 각종 공통 컨트롤의 사용 방법을 익힌다..
강사 : 이준근 Win32 API 강사 : 이준근
2강. JAVA 프로그래밍이란?-II & 변수 JAVA 프로그램 환경설정과 실행 방법 변수란?
태양계 시뮬레이션 팀 명: 복학생 강유진 박지혜.
구조체 struct 구조체와 함수 구조체의 배열, sizeof 연산자 열거형 enum 형 정의 typedef
명품 웹 프로그래밍.
9장 글꼴.
9장 글꼴.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
Microsoft Visual C++ 제 1편 입문편 5장. 샘플 프로그램의 사용자화
Visual C++ Programming How to draw 3
CH 1. MFC 전체보기 정보통신공학과 안 재 형.
Lesson 10. 애플릿과 그래픽.
Visual C++ Programming Common Controls
Visual C++ Programming Common Controls
5장. 마우스와 키보드.
대화상자 편집기의 사용법을 익힌다. 모드형 대화상자와 비 모드형 대화상자의 차이점을 이해하고 작성 방법을 익힌다.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제2장 데이터 및 수식.
충북대학교 컴퓨터 그래픽스 연구실 3학기 김일수
프로그래밍2 및 실습 C언어 기반의 C++ 2.
Visual C++ Programming MFC Programming의 이해
날짜: 팀명: TEAM-SIX 발표자: 이기영
Real-time Tactics Game
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Java의 정석 제 2 장 변수(Variable) Java 정석 남궁성 강의
제 12장. 사용자 정의형으로서의 클래스 학기 프로그래밍언어및실습 (C++).
4장 - PHP의 표현식과 흐름 제어-.
충북대학교 컴퓨터 그래픽스 연구실 3학기 김일수 작성
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
7강. 객체지향 프로그램의 본질 메소드 프로그래밍의 한계 객체의 개념 및 클래스의 이해
1강 포토샵 기초 한겨레문화센터 전임강사 임 규 근.
Music Robot #Define A+(12-15조) 팀원: 05학번 양현철 , 김 청 07학번 예강훈 , 김한수
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
3장. 제어 메시지 처리하기 1/211 1.
6월 1주 주간메뉴표 NEW 엄마손 조식 쉐프 삼촌 중식 참새 방앗간 석식 ◎원산지 안내 : 쌀(국내산)
떠나자! 우주로 환영합니다 경상남도사천교육청영재교육원 안녕하십니까? 지금부터 대구광역시 교육과학연구원 발명교육센터 개관에 따른
성공적인 입사지원서 작성법 제이비커리어 교육수석 소 은 선.
컨트롤, 프로퍼티, 이벤트.
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
Presentation transcript:

Lecture 3 Graphics with GDI

목차 그래픽의 기본 GDI Device Context DC를 이용한 하드웨어 독립적인 프로그래밍 GDI 오브젝트 클래스 그래픽 옵션 바꾸기 글꼴과 텍스트 출력

1. 그래픽의 기본 윈도우 그래픽 관련 용어 윈도우는 강력한 그래픽 기능 지원  프로그래머는 윈도우 운영체제에서 지원하는 그래픽 기능을 호출하여 복잡한 그래픽 기능을 간단히 수행 관련 용어 그래픽 디바이스 인터페이스(GDI: Graphics Device Interface) 디바이스 컨텍스트(DC: Device Context) GDI 오브젝트 (GDI Object)

2. GDI(Graphics Device Interface) 윈도우 운영체제에서 디바이스 드라이버를 이용하여 하드웨어 독립적인 프로그래밍이 가능 GDI: 윈도우 운영체제들이 공통적으로 응용 프로그램에 제공하는 그래픽 기능 응용 프로그램 윈도우 운영체제 디바이스 드라이버 디바이스(하드웨어) 하드웨어 독립적 하드웨어 종속적

3. DC(Device Context) 디바이스 컨텍스트(DC)란? 디스플레이나 프린터와 같은 장치의 그리기 속성에 관한 정보를 가지고 있는 윈도우 자료 구조체 선, 도형, 그림과 관련된 옵션들을 DC에 모아놓고 그래픽 함수들은 이 DC 안의 값들을 참조 DC의 옵션들은 기본 값들이 정해져 있으며 변경 가능 관련 클래스

Device Context Classes (MFC) CDC 디바이스 컨텍스트를 구현한 클래스 그래픽을 위한 필요한 대부분의 GDI 함수들을 멤버 함수로 구현(약 200여 개에 달하는 멤버 함수를 가짐) 화면에 출력하기 위해서는 CDC의 객체가 있어야 함 GetDC() 함수는 현재의 객체를 포함하는 윈도우의 클라이언트 영역을 나타내는 DC를 돌려줌 DC는 자원이므로 작업 끝난 후에는 ReleaseDC() 함수를 사용하여 반환해야 함  아니면 자원 고갈 우려 CDC *pDC = GetDC(); pDC->Rectangle(10,10,100,100); ReleaseDC(pDC);

Device Context Classes (MFC) CClientDC 클래스 지정된 윈도우의 클라이언트 영역을 나타냄 GetDC()와 ReleaseDC()를 생성자와 소멸자에서 자동 수행 현재의 윈도우를 가리키는 포인터 CClientDC dc(this); dc.Rectangle(10,10,100,100);

Device Context Classes (MFC) CWindowDC 클라이언트 영역이 아닌 곳에 출력을 하고자 할 때 사용  타이틀바, 메뉴바, 스크롤바 등) CPaintDC 클래스 WM_PAINT 메시지가 전달된 경우에 사용 WM_PAINT는 윈도우의 클라이언트의 내용이 다시 그려질 필요가 있을 때 전달되는 메시지 CMetaFileDC 클래스 원하는 그림의 생성을 위해 replay 할 수 있는 GDI 명령 sequence를 담고 있는 메타 파일

4. DC를 이용한 하드웨어 독립적인 프로그래밍 DC는 윈도우를 구분함

DC를 이용한 하드웨어 독립적인 프로그래밍 DC는 디바이스 자체도 구분 동일한 코드로 팩스 모뎀, 화면, 프린터, 플로터 등에 전송할 수 있음

5. GDI 오브젝트 클래스 GDI 오브젝트란 ? GDI 오브젝트들 DC 옵션들은 여러 개의 범주로 그룹화 되어 있음 DC 옵션 범주를 나타내는 클래스들이 있으며, 그 인스턴스가 GDI 오브젝트 GDI 오브젝트들 Bitmap : 비트맵 그림 Brush : 영역 내부를 채울 때 사용되는 픽셀의 색, 패턴 Font : 문자 출력 시 글꼴 모양, 크기 등 Pen : 선이나 영역 경계선의 색상, 두께, 패턴 Palette: 색상 수가 제한되는 상황에서 실제로 출력될 색상 세트 Region: 그림 그릴 영역을 나타내는 타원 또는 다각형 설정

GDI 오브젝트 클래스 GDI 오브젝트 클래스 DC 옵션들의 설정 MFC 클래스 기본 값 펜 CPen 1픽셀 굵기의 검은 색 실선 브러시(붓) CBrush 단일 흰색 브러시 글꼴 CFont 시스템 글꼴 비트맵 CBitmap 없음 팔레트 CPalette 영역 CRgn

펜과 브러쉬 펜과 브러쉬를 이용한 그래픽 현재 DC에 설정되어 있는 펜을 이용하여 경계선을 그림 함수 (CDC 클래스의 멤버함수) 그리기 기능 MoveTo, LineTo 선 Rectangle, FillRect, FrameRect, Draw3dRect 사각형 Ellipse 타원 Pie 파이 Arc 호 Polygon 다각형 PolyDraw, PolyBezier, PolyBezierTo 베지어 곡선 FrameRgn 영역의 경계선

6. 그래픽 옵션 바꾸기 펜 생성 예제 CPen pen; pen.CreatePen(PS_SOLID, 3, RGB(255, 0, 0)); CClientDC dc(this); dc.SelectObject(&pen); dc.Rectangle(10, 10, 100, 100); 어떤 문제가 존재?

그래픽 옵션 바꾸기 새로운 펜으로 선택하고 되돌리지 않으면 함수가 종료되는 순간에 DC에 저장되어 있던 펜 오브젝트는 파괴 SelectObject 함수의 리턴값으로 넘어오는 GDI 오브젝트를 저장해 두었다가 옵션 복원에 사용 CPen pen; pen.CreatePen(PS_SOLID, 3, RGB(255, 0, 0)); CClinetDC dc(this); CPen *pOldPen = (CPen *)dc.SelectObject(&pen); dc.Rectangle(10, 10, 100, 100); dc.SelectObject(pOldPen);

내장(Stock) GDI 오브젝트 자주 쓰이는 GDI 클래스의 오브젝트는 윈도우 운영체제가 내장하고 있음 GetStockObject 함수로 이용할 수 있음 내장 오브젝트는 항상 메모리에 상주하므로 이전 DC 값으로 환원할 필요 없음 CClientDC dc(this); dc.SelectObject(GetStockObject(WHITE_PEN));

내장(Stock) GDI 오브젝트 GDI 오브젝트 종류 내장 GDI 오브젝트 BLACK_PEN WHITE_PEN 펜 NULL_PEN 브러시 BLACK_BRUSH WHITE_BRUSH DKGRAY_BRUSH GRAY_BRUSH HOLLOW_BRUSH LTGRAY_BRUSH NULL_BRUSH 글꼴 ANSI_FIXED_FONT ANSI_VAR_FONT DEVICE_DEFAULT_FONT OEM_FIXED_FONT SYSTEM_FONT

7. 글꼴과 텍스트 출력 LOGFONT: 논리적 글꼴의 표현을 위한 구조체 typedef struct tagLOGFONTW { LONG lfHeight; // 높이 LONG lfWidth; // 너비 LONG lfEscapement; // 방향 LONG lfOrientation; // 회전 각도 LONG lfWeight; // 굵기 BYTE lfItalic; // 기울임꼴 BYTE lfUnderline; // 밑줄 BYTE lfStrikeOut; // 취소선 BYTE lfCharSet; // 문자 세트 BYTE lfOutPrecision; // 출력 정확도 BYTE lfClipPrecision; // 클리핑 정확도 BYTE lfQuality; // 출력의 질 BYTE lfPitchAndFamily; // 자간 TCHAR lfFaceName[LF_FACESIZE]; // 글꼴 이름 } LOGFONT;

글꼴과 텍스트 출력 CFont 클래스의 멤버 함수 CreateFont(): 폰트의 생성과 설정 BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename ); 폰트의 생성과 설정 CFont newFont, *pOldFont; newFont.CreateFont(100, 0, 0, 0, 400, FW_NORMAL, FALSE, FALSE, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE, _T(“Times New Romans”)); pOldFont = (CFont *)pDC->SelectObject(&newFont);

글꼴과 텍스트 출력 텍스트 출력 함수 BOOL TextOut( int x, int y, const CString& str ); int DrawText( const CString& str, LPRECT lpRect, UINT nFormat ); dc.TextOut(40, 60, “Hello”); CRect rect; GetClientRect(&rect); // 클라이언트 영역의 크기를 얻어냄 dc.DrawText("Hello", &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER);

글꼴과 텍스트 출력 텍스트 색상 및 배경 색상 변경 텍스트 배경 모드 변경 CFontDialog dc.SetTextColor(RGB(255, 0, 0)); dc.SetBkColor(RGB(0, 0, 255)); 텍스트 배경 모드 변경 dc.SetBkMode(TRANSPARENT); // 투명 dc.SetBkMode(OPAQUE); // 불투명: 배경 색상 적용 CFontDialog 글꼴 정보를 입력 받기 위한 공통 다이얼로그 예제 파일 (http://cs.sookmyung.ac.kr/class/06395/Lab/Font.exe)