Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공

Slides:



Advertisements
Similar presentations
Timer Department of Digital Contents Sang Il Park.
Advertisements

Term project. Touch-screen 활용 그림판 –Touch-screen 을 입력장치로 하여 LCD 상에 그림을 그리는 프로그램 – 터치 입력을 절대 좌표로 받는 디바이스 /dev/touch 를 만들어 응용 프 로그램에서 수행하도록 함. –User interface.
Department of Digital Contents Sang Il Park
윈도우 프로그래밍 실습 김 창 헌.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
어서와 Java는 처음이지! 제20장 실전프로젝트 #2.
Lab 6 Guide: 교재 14장 DLL 예제. Regular DLL 만들기 - 암시적 연결 ( 쪽) 명시적 연결 ( 쪽)
대림대학교 2017년도 1학기 강의 왕보현 순서도와 스크래치 5주차 대림대학교 2017년도 1학기 강의 왕보현
MFC Application Frameworks (AFX)
순차, 조건, 반복 이점숙 농대 뒷편 언덕을 넘어가며 같은 문제 다르게 해결 순차, 조건, 반복 이점숙
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
순차, 조건, 반복 이점숙 같은 문제 다르게 해결하기 순차, 조건, 반복 이점숙
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Image & Video processing
5강. Servlet 본격적으로 살펴보기-I 프로젝트 만들기 doGet() doPost()
컴퓨터 계측 및 실습 스테핑 모터 영남대학교 기계공학부.
윤 홍 란 다이알로그(대화상자) 윤 홍 란
Department of Digital Contents Sang Il Park
공통 컨트롤의 종류와 특징을 개관한다. 각종 공통 컨트롤의 사용 방법을 익힌다..
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
컴퓨터 계측 및 실습 스테핑 모터 영남대학교 기계공학부.
Lesson 9. 예외처리.
Visual C++ Programming How to draw 3
프로세싱 게임 메이킹 자바실험실 JavaLab.org 이동준.
Lecture 3 Graphics with GDI
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
충북대학교 컴퓨터 그래픽스 연구실 3학기 김일수
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
WinCE Device Driver 실습 #3
Power Java 제14장 배치 관리자.
컴퓨터 프로그래밍 : 실습3 2장 데이터와 식.
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
In2smile PT Template in2smile.com.
Visual C++ Programming
3차원 객체 모델링.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
13. 연산자 오버로딩.
JAVA Canvas Swing.
Method & library.
자바응용.
Chapter03 캔버스(1) HTML5 Programming.
GUI 소켓 애플리케이션 Chapter 08. * 학습목표 윈도우 GUI 애플리케이션의 구조와 동작 원리를 이해
Lesson 2. 기본 데이터형.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
제 1장. C++ 시작하기.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
그래픽 모듈 편집.
충북대학교 컴퓨터 그래픽스 연구실 3학기 김일수 작성
Python Turtle 민경현.
웹디자인
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
LabVIEW WiznTec 주임 박명대 1.
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
Tween Animation 천승현.
CAD 실습 2013년 2학기.
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
CHAP 21. 전화, SMS, 주소록.
Chapter 04. TCP 서버/클라이언트.
05. 그래픽 빨간색 사각형 그리기 그래픽 그리기 발 표 자 : 07 정 경 오.
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
9 브라우저 객체 모델.
엔코더 프로그램 설명 // 쓰레드를 사용하기 때문에 변수와 핸들을 전역변수로 지정 HANDLE hDevice;
Power Java 제14장 배치 관리자.
Network Lab. Young-Chul Hwang
Power Point 예제 디자인 적용 (서식) - (디자인적용) - (원하는 디자인 선택)
그래픽 컨트롤 (Graphic Control)
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
Presentation transcript:

Lab 2 Guide: 교재 3장 그래픽 예제 (175-188쪽) - 펜과 브러시로 그리기 - 튀는 공

실습 목적 및 장비 실습 목적 장비: PC, 윈도우 운영체제, Visual Studio (VC++ 6.0) 그래픽 프로그래밍의 이해 디바이스 컨텍스트 사용법 GDI 객체 사용법 그리기 함수들의 응용 타이머 응용 타이머의 설정 타이머 이벤트 처리 장비: PC, 윈도우 운영체제, Visual Studio (VC++ 6.0)

1. 펜과 브러시로 그리기 예제 프로그램 개요 Single Document 애플리케이션 타이머의 진행에 따라 다양한 색상의 브러시와 다양한 색상 및 굵기의 펜을 사용하여 선, 사각형, 타원, 둥근 모서리 사각형, 현, 파이 등을 그림 실행 파일(http://cs.sookmyung.ac.kr/class/06395/Lab/GDIDemo.exe)

타이머 사용 타이머 설정: SetTimer() 함수 타이머 종료: KillTimer(UINT nIDEvent) 함수 CWnd 클래스의 멤버 함수 타이머를 설정하여 두면 지정된 시간 간격으로 WM_TIMER 메시지 발생 OnTimer() 메시지 핸들러 함수 또는 지정된 함수가 호출됨 타이머 종료: KillTimer(UINT nIDEvent) 함수 타이머 이벤트 처리: 뷰 클래스의 OnTimer(UINT nIDEvent) SetTimer(UINT nIDEvent, UINT nElapse, NULL); Timer ID (여러 개의 타이머 설정가능) 타이머 시간 간격 (1/1000초 단위) 메시지 핸들러 함수 (default: OnTimer()) SetTimer(0,1000,NULL); SetTimer(1, 800, NULL);

펜과 브러시로 그리기 예제 프로그램 시작 시 타이머를 켜고 종료 시 타이머 끔 - CGDIDemoView::OnInitialUpdate() 함수 안에서 SetTimer(0, 100, NULL); - CGDIDemoView::OnDestroy() 함수 안에서 KillTimer(0); 2. WM_TIMER 메시지 핸들러 작성 - void CGDIDemoView::OnTimer(UINT nIDEvent)

펜과 브러시로 그리기 예제 (OnTimer() 함수) void CGDIDemoView::OnTimer(UINT nIDEvent) { CClientDC dc(this); // 화면 출력을 위한 DC 클래스 CRect rect; // 화면 크기를 얻기 위한 변수 CBrush brush, *pOldBrush; // 브러시 오브젝트 CPen pen, *pOldPen; // 펜 오브젝트 int x1,y1,x2,y2,x3,y3,x4,y4; // 화면 좌표 int r,g,b; // 컬러 int nObject; // 그래픽 타입 GetClientRect(rect); // 화면의 크기를 얻는 함수

펜과 브러시로 그리기 예제 (OnTimer() 함수) r = rand() % 255; // 컬러를 랜덤하게 설정 g = rand() % 255; b = rand() % 255; brush.CreateSolidBrush(RGB(r,g,b)); // 브러시 생성 pOldBrush = (CBrush *)dc.SelectObject(&brush); // DC에 브러시 선택 r = rand() % 255; // 컬러를 랜덤하게 설정 pen.CreatePen(PS_SOLID, 5, RGB(r,g,b)); // 펜 생성 pOldPen = (CPen *)dc.SelectObject(&pen); // DC에 펜 선택

펜과 브러시로 그리기 예제 (OnTimer() 함수) x1 = rand() % rect.right; // 좌표를 랜덤하게 설정 y1 = rand() % rect.bottom; x2 = rand() % rect.right; y2 = rand() % rect.bottom; x3 = rand() % rect.right; y3 = rand() % rect.bottom; x4 = rand() % rect.right; y4 = rand() % rect.bottom; nObject = rand() % 6; // 그래픽 타입을 랜덤하게 설정

펜과 브러시로 그리기 예제 (OnTimer() 함수) switch(nObject) { case 0: // 라인 그리기 dc.MoveTo(x1,y1); dc.LineTo(x2,y2); break; case 1: // 사각형 그리기 dc.Rectangle(x1,y1,x2,y2); case 2: // 타원 그리기 dc.Ellipse(x1,y1,x2,y2);

펜과 브러시로 그리기 예제 (OnTimer() 함수) case 3: // 둥근 사각형 그리기 dc.RoundRect(x1,y1,x2,y2,x3,y3); break; case 4: // 현 그리기 dc.Chord(x1,y1,x2,y2,x3,y3,x4,y4); case 5: // 파이 그리기 dc.Pie(x1,y1,x2,y2,x3,y3,x4,y4); }

펜과 브러시로 그리기 예제 (OnTimer() 함수) dc.SelectObject(pOldPen); // DC 복원 dc.SelectObject(pOldBrush); // DC 복원 CView::OnTimer(nIDEvent); }

실습 문제 선, 사각형, 타원, 둥근 모서리 사각형, 현, 파이 대신에 3차원 사각형, 문자 를 그린다 선, 사각형, 타원, 둥근 모서리 사각형, 현, 파이 대신에 3차원 사각형, 문자 를 그린다 문자의 경우 글꼴, 크기, 문자 값이 매번 변경되도록 한다 문자 값의 범위는 ‘A’에서 ‘Z’로 한다.

2. 튀는 공 예제 프로그램 개요 Single Document 애플리케이션 실행 파일(http://cs.sookmyung.ac.kr/class/06395/Lab/Bounce.exe)

타이머의 설정과 종료 void CBounceView::OnInitialUpdate() { CView::OnInitialUpdate(); // 0.05초마다 WM_TIMER 메시지가 발생하도록 설정 SetTimer(0, 50, NULL); } void CBounceView::OnDestroy() CView::OnDestroy(); // 타이머를 꺼줌 KillTimer(0);

OnTimer() #define R 20 #define STEP 5 void CBounceView::OnTimer(UINT nIDEvent) { CClientDC dc(this); static int nX=R, nY=R; // 현재 공의 위치 static int nCX=STEP, nCY=STEP; // 공의 이동 방향 CRect rect; // 클라이언트 영역의 크기 GetClientRect(&rect); // 클라이언트 영역의 크기를 얻음

OnTimer() // 이전 공을 지우기 위해 흰색 브러시를 선택 dc.SelectStockObject(WHITE_BRUSH); dc.Ellipse(nX-R,nY-R,nX+R,nY+R); // 원 그리기 // x 좌표 변경 if (nX < R) nCX = STEP; else if (nX > rect.Width()-R) nCX = -STEP; nX += nCX; //y 좌표 변경 if (nY < R) nCY = STEP; else if (nY > rect.Height()-R) nCY = -STEP; nY += nCY;

OnTimer() // 새로 공을 그리기 위해 빨간색 브러시 생성 CBrush brush, *pOldBrush; brush.CreateSolidBrush(RGB(255,0,0)); // DC에 빨간색 브러시 선택 pOldBrush = (CBrush *)dc.SelectObject(&brush); dc.Ellipse(nX-R,nY-R,nX+R,nY+R); // 원 그리기 dc.SelectObject(pOldBrush); // DC 복원 CView::OnTimer(nIDEvent); }

실습 문제 Bounce 예제에 두 개의 움직이는 물체를 둔다 두 번째 물체의 모양도 원으로 하되 색상과 선의 굵기는 달리 한다 두 번째 물체는 첫 번째 물체보다 빠르게 움직인다