GDI 와 DC GDI (Graphics Device Iterface) 응용프로그램이하드웨어를제어할수있도록윈도우 OS 가제공하는모든기능 윈도우가출력장치에대한정보를스스로판단하고분석하여, 실제로사용할드라이버를불러옴 이를이용할경우, 하드웨어독립적인프로그래밍을할수있음 Widw

Similar documents
GDI의 개념

Microsoft PowerPoint - 11주차.pptx

MFC 프로그래밍

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

Microsoft PowerPoint - 09-CE-7-선과 도형

디지털영상처리3

Programming hwp

Microsoft PowerPoint - 04windows.ppt

08장 윈도우에서의 그리기

윈도우즈 프로그래밍

Microsoft PowerPoint - logo_2-미해답.ppt [호환 모드]

디지털영상처리3

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

10 장세균전프로그래밍 10.1 게임룰 (1) 사람과컴퓨터가싸우는 2인용보드게임이다. (2) 사람이먼저움직이고, 컴퓨터가움직인다. (3) 세균을가로및세로방향으로 2칸까지빈칸으로이동시킬수있다. (4) 1칸을이동할경우에는복제가된다. (5) 이동한후주변세균은내편으로바뀐다.

쉽게 풀어쓴 C 프로그래밍

Visual C++의 개요

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - C++ 5 .pptx

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

슬라이드 1

1

슬라이드 1

Chapter 1. MFC 시작하기

PowerPoint Presentation

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

gnu-lee-oop-kor-lec06-3-chap7

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

PowerPoint 프레젠테이션

Microsoft Word - PLC제어응용-2차시.doc

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

4 장클래스와객체 클래스와객체 public과 private 구조체와클래스객체의생성과생성자객체의소멸과소멸자생성자와소멸자의호출순서디폴트생성자와디폴트소멸자멤버초기화멤버함수의외부정의멤버함수의인라인함수선언 C++ 프로그래밍입문

그래픽 프로그래밍

Microsoft PowerPoint - hci2-lecture4.ppt

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

17장 클래스와 메소드

Windows 8에서 BioStar 1 설치하기

설계란 무엇인가?

Open GL

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

2007백서-001-특집

00목차

¾Ë·¹¸£±âÁöħ¼�1-ÃÖÁ¾

01....b

(291)본문7

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63>

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

게임 기획서 표준양식 연구보고서

adfasdfasfdasfasfadf

PowerPoint Presentation

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

쉽게 풀어쓴 C 프로그래밍

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint Presentation

지도상 유의점 m 학생들이 어려워하는 낱말이 있으므로 자세히 설명해주도록 한다. m 버튼을 무리하게 조작하면 고장이 날 위험이 있으므로 수업 시작 부분에서 주의를 준다. m 활동지를 보고 어려워하는 학생에게는 영상자료를 접속하도록 안내한다. 평가 평가 유형 자기 평가

Chapter 6 Objects and Classes

PowerPoint Presentation

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

tiawPlot ac 사용방법

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

SW

1 SW

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

Microsoft PowerPoint - hci2-lecture11.ppt

PowerPoint Template

Microsoft PowerPoint - hci2-lecture11.ppt

Microsoft PowerPoint - additional08.ppt [호환 모드]

PowerPoint 프레젠테이션

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

1장 윈도우 프로그래밍 들어가기

(Microsoft PowerPoint - \301\24608\260\255 - \261\244\277\370\260\372 \300\347\301\372)

Microsoft PowerPoint - Chap12-OOP.ppt

Slide 1

PowerPoint Template

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

API 매뉴얼

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint 장강의노트.ppt

e-비즈니스 전략 수립

BMP 파일 처리

Lab 3. 실습문제 (Single linked list)_해답.hwp

<Software Modeling & Analysis> OSP Stage 1000 < Plan & Elaboration > - v2 - Team 박미관 박준모 이영준 2013/04/05 1

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

윈도우 프로그래밍의 개념

OOO Paint

(Microsoft PowerPoint - \270\266\300\314\305\251\267\316\304\250USB_Host_Device_\272\316\306\256\267\316\264\365\275\307\275\300_Philip.ppt)

Microsoft PowerPoint 세션.ppt

Convenience Timetable Design

ISP and CodeVisionAVR C Compiler.hwp

Microsoft PowerPoint - CPP_chap3

Multi-pass Sieve를 이용한 한국어 상호참조해결 반-자동 태깅 도구

제목

Transcription:

Chapter 5. 그래픽처리 Widws Prgrammig, 2009 Fall

GDI 와 DC GDI (Graphics Device Iterface) 응용프로그램이하드웨어를제어할수있도록윈도우 OS 가제공하는모든기능 윈도우가출력장치에대한정보를스스로판단하고분석하여, 실제로사용할드라이버를불러옴 이를이용할경우, 하드웨어독립적인프로그래밍을할수있음 Widws Device Driver Prgram S/W Device H/W Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 2

GDI 와 DC DC (Device Ctext) 출력장치에무엇인가를출력하고자할경우, 윈도우로부터얻은출력장치를사용할수있는권한 그래픽에필요한모든옵션을한곳에모아둔구조체 i.e. 선을그릴때옵션, 문자를출력할때옵션, 도형을칠할때옵션등 GDI vs DC 미술시간에필요한도화지에해당하는것이 DC 클라이언트영역혹은윈도우영역의 DC 를얻음 도화지에실제그림을그릴수있는연필, 펜등이 GDI 펜, 브러시등 GDI 객체를정의 Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 3

DC를얻는방법 ODraw() 함수나 OPait() 함수를이용 ODarw() 함수에서인자로넘어온 CDC 클래스 OPait() 함수에서 CPaitDC 클래스를받아사용 ODraw() : view class, OPait() : ther classes 윈도우가변하여도화면출력이변하지않음 vid CPractice4_1View:ODraw(CDC* pdc) { } vid CPractice4_1View::OPait() { CPaitDC dc(this); } Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 4

DC를얻는방법 GetDC() 함수를이용 GetDC() 함수를이용하여 CDC 클래스의인스턴스를포인터형태로넘겨받아이용 작업종료후, 반드시 ReleaseDC() 를호출하여시스템에 DC 반환 윈도우가변하면, 출력내용이사라짐 화면의변화가생기면, WM_PAINT 가호출되고, ODraw() 혹은 OPait() 가호출되어화면이갱신되므로 CDC *pdc = GetDC() ; // DC 얻음 ReleaseDC(pDC); // DC 반환 Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 5

DC를얻는방법 CClietDC 클래스를이용 CDC 클래스의파생클래스인 CClietDC 를이용 생성자함수에서 GetDC() 를호출하고소멸자함수에서 ReleaseDC() 호출 객체생성시, 초기값으로작업할영역에속한윈도우의 this 포인터를넘김 GetDC() 를이용하므로, 윈도우가변하면출력이사라짐 CClietDC dc(this); Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 6

DC를얻는방법 CWidwDC 클래스를이용 이전의방법은클라이언트영역을얻는방법이지만, CWidwDC 는윈도우영역에대한 DC 를얻음 ( 윈도우영역에그래픽출력 ) GetWidwDC() 함수를이용하여, WidwDC 클래스의인스턴스를포인터로넘겨받아이용 작업종료후, 반드시 ReleaseDC() 함수를호출하여시스템에반환 CWidwDC *pdc = GetWidwDC();. ReleaseDC(pDC); Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 7

GDI 객체 GDI 객체는화면에그림을그리거나문자를출력할때사용 윈도우프로그램은문자역시하나의그림으로취급 펜, 브러시, 폰트, 비트맴등을핸들링하는핸들 GDI 객체의핸들은가지고있는클래스를 GDI 객체클래스 GDI 객체 GDI 객체클래스 기본값 사용용도 펜 CPe 검정색, 실선, 1 픽셀크기 점, 선, 테두리 브러시 CBrush 무늬없는흰색내부채우기 폰트 CFt 시스템폰트문자의폰트 비트맵 CBitmap 무비트맵출력 영역 CRg 무 영역만들기, 변경하기 팔레트 CPallete 무팔레트조작 Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 8

GDI 객체사용법 1. GDI 객체생성 CPe pe, *ldpe; pe.createpe(ps_solid, 1, RBG(0,0,0)); pe ldpe 3. DC 를사용하여그래픽출력 pdc->ellipse(0,0,10,10); 2. GDI 객체등록 ldpe = pdc->selectobject(&pe); 4. 이전 GDI 객체로되돌림 pdc->selectobject(ldpe); CPallete pe Pe Brush 5. GDI 객체삭제 pe.deleteobject(); CRg Bitmap Ft Device Ctext Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 9

CPe BOOL CreatePe( it PeStyle, it Width, COLORREF crclr ); http://msd.micrsft.cm/e-us/library/aa273771(vs.60).aspx PeStyle: 펜스타일 Width: 펜의굵기 crclr: 펜의색상 PeStyle 내용모양 PS_SOLID PS_DASH PS_DOT PS_DASHDOT PS_DASHDOTDOT PS_NULL 실선파선점선일점쇄선이점쇄선선을그리지않음 Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 10

CBrush 영역의내부를채움 색, 패턴등을설정브러시생성 BOOL CreateSlidBrush( COLORREF crclr ); http://msd.micrsft.cm/e-us/library/aa268652(vs.60).aspx brush.createslidbrush(rgb(0, 0, 0)); // 검정색브러시를생성 BOOL CreateHatchBrush( it Idex, COLORREF crclr ); Style http://msd.micrsft.cm/e-us/library/aa268650(vs.60).aspx brush.createhatchbrush(hs_cross, RGB(0,0,0)); 십자가형태의빗금을가진브러시생성 HS_CROSS HS_BDIAGONAL HS_DIAGCROSS HS_FDIAGONAL HS_HORIZONTAL HS_VERTICAL 등록, 사용, 삭제는펜과동일 Cpe à CBrush Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 11

펜과브러시를이용한그래픽함수 CPe pe, *ldpe; pe.createpe(ps_solid, 2, RGB(0, 0, 0)); ldpe = pdc->selectobject(&pe); // 선그리기 pdc->mvet(120, 100); pdc->liet(180, 200); CBrush brush, *ldbrush; brush.createslidbrush(rgb(0xff,0xff,0x00)); ldbrush = pdc->selectobject(&brush); // 사각형그리기 pdc->rectagle(300, 10, 450, 80); pdc->selectobject(ldbrush); brush.deleteobject(); brush.createslidbrush(rgb(0xff,0x00,0x00)); ldbrush = pdc->selectobject(&brush); // 닫히지않은다각형그리기 CPit ptdata[3]; ptdata[0].x = 300; ptdata[0].y = 500; ptdata[1].x = 400; ptdata[1].y = 300; ptdata[2].x = 300; ptdata[2].y = 300; pdc->plylie(ptdata, 3); // 닫힌다각형그리기 // 닫히지않은다각형그리기 ptdata[0].x = 10; ptdata[0].y = 10; ptdata[1].x = 80; ptdata[1].y = 100; ptdata[2].x = 100; ptdata[2].y = 10; pdc->plyg(ptdata, 3); // 타원그리기 pdc->ellipse(200, 250, 300, 300); pdc->selectobject(ldbrush); brush.deleteobject(); pdc->selectobject(ldpe); pe.deleteobject(); Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 12

래스터오퍼레이션 (Raster Operati) 새로그려야할그림과기존에화면에그려져있는그림을합성하는것을말함 래스터오퍼레이션은펜과브러시에적용되며, SetROP2() 로설정 it SetROP2( it DrawMde ); http://msd.micrsft.cm/e-us/library/aa278978(vs.60).aspx R2_COPYPEN 배경의화면을무시하고새로그려지는그림이출력 R2_XORPEN 배경의화면을유지하면서, 움직이는그림을그릴때사용 R2_XORPEN 으로한번그려주면그림이그려지고같은방법으로다시한번그리면원래의바탕색이복원 Aimati Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 13

래스터오퍼레이션 (Raster Operati) RGB () 함수는윈도우에서색상을표현각각 0~255 의값을갖음 빨강 : RGB(255, 0, 0), 파랑 (0, 0, 255), 흰색 :RGB(255, 255, 255) 이들을이진수로표현하면빨강 : RGB(11111111, 0, 0) 임 바탕색이흰색일경우, R2_XORPEN 으로파란색을그림 R G B 바탕색 11111111 11111111 11111111 새로그리는색 00000000 00000000 11111111 출력되는색 ( 노랑 ) 11111111 11111111 00000000 다시파란색으로그림 R G B 바탕색 11111111 11111111 00000000 새로그리는색 00000000 00000000 11111111 출력되는색 ( 노랑 ) 11111111 11111111 11111111 Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 14

CBitmap 1. 화면 DC 와메모리 DC 생성 비트맵을로드할메모리 DC 비트맵이출력될화면 DC //pdc; CDC memdc; memdc pdc 2. 화면 DC 와호환성갖는메모리 DC 생성 memdc.createcmpatibledc(pdc); bitmap 3. 비트맵로딩 CBitmap bitmap, *ldbitmap; bitmap.ladbitmap(idb_bitmap1); 4. 메모리 DC 에비트맵설정 ldbitmap = memdc.selectobject(&bitmap); 5. 비트맵블록전송 6. DC 복원 pdc->bitblt(0, 0, 450, 85, &memdc, 0, 0, SRCCOPY); memdc.selectobject(ldbitmap); Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 15

CBitmap virtual BOOL CreateCmpatibleDC( CDC* pdc ); http://msd.micrsft.cm/e-us/library/aa293677(vs.60).aspx BOOL LadBitmap( UINT IDResurce ); http://msd.micrsft.cm/e-us/library/aa268633(vs.60).aspx BOOL BitBlt( it x, it y, it Width, it Height, CDC* psrcdc, it xsrc, it ysrc, DWORD dwrp ); http://msd.micrsft.cm/e-us/library/aa293654(vs.60).aspx Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 16

CFt memset(&lf, 0, sizef(logfont)); CClietDC dc(this); lf.lfheight = -MulDiv(12, dc.getdevicecaps(logpixelsy), 72); strcpy(lf.lffacename, "Times New Rma"); CFtDialg dlg(&lf); if( dlg.dmdal() == IDOK ) { dlg.getcurretft(&lf); Ivalidate(); } BOOL TextOut( it x, it y, cst CStrig& str ); http://msd.micrsft.cm/e-us/library/aa279021(vs.60).aspx CSize TabbedTextOut( it x, it y, cst CStrig& str, it TabPsitis, LPINT lptabstppsitis, it TabOrigi ); http://msd.micrsft.cm/e-us/library/aa279019(vs.60).aspx BOOL ExtTextOut( it x, it y, UINT Optis, LPCRECT lprect, cst CStrig& str, LPINT lpdxwidths ); http://msd.micrsft.cm/e-us/library/aa293769(vs.60).aspx it DrawText( cst CStrig& str, LPRECT lprect, UINT Frmat ); http://msd.micrsft.cm/e-us/library/aa293740(vs.60).aspx Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 17

CFt CFt ft, *ldft; ft.createft(20, 20, // 폰트의너비와높이 0, 0, // 기울어진각도 FW_DONTCARE, // 폰트의굵기 FALSE, FALSE, // 폰트의기울임꼴과밑줄 FALSE, DEFAULT_CHARESET, // 폰트의취소선과문자셋 OUT_DEFAULT_PRECIS, // 출력정확도 CLIPDEFAULT_PRECIS, // 클리핑정확도 DEFAULT_QUALITY, DEFAULT_PITCH, // 출력의질과자간 굴림체 ); // 폰트이름 virtual COLORREF SetTextClr( COLORREF crclr ); http://msd.micrsft.cm/e-us/library/aa278990(vs.60).aspx virtual COLORREF SetBkClr( COLORREF crclr ); http://msd.micrsft.cm/e-us/library/aa278949(vs.60).aspx it SetBkMde( it BkMde ); http://msd.micrsft.cm/e-us/library/aa278952(vs.60).aspx UINT SetTextAlig( UINT Flags ); http://msd.micrsft.cm/e-us/library/aa278983(vs.60).aspx Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 18

실습 마우스를클릭하고드래그함으로써선을그릴수있는프로그램을구현 ( 래스터오퍼레이션 ) OLButtDw, OMuseMve 마우스를누른상태에서마우스커서를움직이면선이마우스커서를따라다이며움직이며, 마우스를놓으면선이고정됨 완료되면, 책에있는실습 5-1 을수행 Ceter fr E-Busiess Techlgy Cpyright Ó2009 by CEBT IDS Lab. Semiar - 19