Download presentation
Presentation is loading. Please wait.
1
Computer Graphics 1 윈도우 프로그래밍 실습 II 김 창 헌김 창 헌
2
Computer Graphics 2 Visual C++ 그래픽 프로그램 GDI( Graphic Device Interface ) 이용한 프로그램 GDI 란 ? 응용프로그램과 디바이스 드라이버의 중간 다리 역할을 하 는 것으로 응용 프로그램에 대한 장치 비 의존적인 그래픽 동작을 수 행한다. 디바이스 컨텍스트 (DC) 그래픽 객체들의 속성과 그래픽 모드를 정의하는 자료의 집합체로 출력 장치에 정보를 표시할 때 필요한 정보를 저장하는 구조체 윈도우프로그램예제
3
Computer Graphics 3 도형 그리기 프로그램 속성 시트에서 도형의 모양과 칼라를 선택하여 마우스 를 클릭한 지점에 도형을 그리는 프로그램.
4
Computer Graphics 4 도형 그리기 프로그램 AppWizard 를 사용하여 “draw” 프로젝트 파일을 생성하고 골격 코드를 작성한다. (SDI 모드 )
5
Computer Graphics 5 도형 그리기 프로그램 속성 페이지 다이얼로그박스 속성 페이지 다이얼로그 박스 를 생성한다. Style 페이지 : IDD_STYLE Color 페이지 : IDD_COLOR
6
Computer Graphics 6 도형 그리기 프로그램 각 페이지 다이얼로그 박스의 Dialog Properties 박스에서 다음 속성을 지정한다.
7
Computer Graphics 7 도형 그리기 프로그램 각 페이지의 첫번째 라디오 버튼 속성에서 Group 을 체 크한다.
8
Computer Graphics 8 도형 그리기 프로그램 속성 페이지의 다이얼로그 박스를 Cproperty Page 클래 스에서 상속받는 새로운 클래스를 생성한다. Style 속성페이지 : CStylePage Color 속성페이지 : CColorPage
9
Computer Graphics 9 도형 그리기 프로그램 속성 페이지의 컨트롤과 관련된 데이터 멤버를 등록한다. Style page 의 라디오 버튼 control IDs: IDC_RECTANGLE type : int member variable :m_nShapeStyle Color page 의 라디오 버튼 Control IDs : IDC_BLACK Type : int member variable : m_nColor
10
Computer Graphics 10 도형 그리기 프로그램 속성 시트의 클래스를 생성한다. ClassWizard 를 실행하여 CPropertySheet 클래스에서 상속받 는 CModalSheet 클래스를 만든다.
11
Computer Graphics 11 도형 그리기 프로그램 CmodalSheet 클래스에 속 성 페이지 클래스 객체를 정의한다. 클래스 멤버를 정의할 때 헤더 파일에 바로 코 딩하지 말고 Class View 의 팝업 메뉴에서 “Add Member Variable” 메뉴 를 통해 등록하는 것이 좋음. #include “ColorPage.h”//Added by ClassView #include “StylePage.h” class CModalSheet : public CpropertySheet { public : CColorPage m_colorPage; CStylePage m_stylePage; };
12
Computer Graphics 12 도형 그리기 프로그램 생성자에서 속성 시트에 속성 페이 지를 추가한다. 추 가되는 순서가 속 성 시트에 나타나 는 순서이다. CModalSheet :: CModalSheet(LPCTSTR pszCaption,CWnd* pParentWnd,UNIT ISelectPage);CPropertySheet(pszCaption,pParentW nd,iSelectPage) { AddPage(&m_stylePage); AddPage(&m_colorPage); }
13
Computer Graphics 13 Class CDrawView : public Cview { protected: Crect m_rect; int m_nDrawStyle; int m_nDrawColor; } CDrawView:: CDrawView() { m_nDrawColor=0; m_nDrawStyle=0; } 도형 그리기 프로그램 뷰클래스에 도형, 칼라, 범위를 나타내는 멤버를 추가하 고 생성자에서 초기화 한다.
14
Computer Graphics 14 도형 그리기 프로그램 뷰 클래스에 왼쪽 마우스 버튼을 클릭한 메시지 WM_LBUTTONDOWN 를 처리하는 OnButtonDown 함수를 만든다. 마우스를 클릭한 지점에 현재 지정된 도형 객체에 선택한 색상으로 내부 를 채운 도형을 그린다.
15
Computer Graphics 15 선택된 도형을 선택된 색으로 그리기. Void CDrawView:: OnLButtonDown(UNIT nFlag,Cpoint point) { COLORREF color[4]={RGB(0,0,0),RGB(255,0,0),RGB(0,255,0 ),RGB(0,0,255)}; CClientDC dc(this); CBrush newBrush(color[m_nDrawColor]); CBrush* pOldBrush=dc.SelectObject(&newBrush) m_rect =Crect(point.x-50,point.y- 50,pint.x+50,point.y+50); switch(m_nDrawStyle) { case 0: //rectangle dc.Rectangle(m_rect); break; case 1: //round rectangle dc.RoundRectangle(m_rect,Cpoint(m_rect.Width()/ 8,m_rect.Heigh()/8); break; Case 2://ellipse dc.RoundRect(m_rect); break;} dc.SelectObject(pOldBrush); Cview:: OnButtonDown(nFlags,point); }
16
Computer Graphics 16 도형 그리기 프로그램 속성 시트를 호출할 메뉴를 만들어 뷰 클래스에 메뉴 항목에 대한 명령 핸들러를 설치하고 함수를 오버라이 드한다. void CDrawView:: OnModalSheet() { CModalSheet dlg(“ 내가 만든 속성 시트 ”); dlg.m_colorPage.m_nColor=m_nDrawColor; dlg.m_stylePage.m_nShapeStyle = m_nDrawStyle; if(dlg.DoModal() == IDOK) { m_nDrawColor = dlg.m_colorPage.m_nColor ; m_nDrawStyle = dlg.m_nShapeStyle; }
17
Computer Graphics 17 도형 그리기 프로그램 컴파일 하고 실행한다.
18
Computer Graphics 18 윈도우 프로그래밍 과제물 도형 모양과 칼라 선택하여 도형 그리기 마우스를 클릭한 곳에 지정된 모양과 색깔의 도형 그리기
19
Computer Graphics 19 과제물 요구사항 내용 제공하는 코드를 참조하여, 그려질 도형과 칼라를 추가 기본 요구사항 삼각형, 타원, 다각형, 부채꼴, etc.. 등의 도형을 추가할 수 있 어야 함 Black, Red, Green, Blue 이외의 색상을 지정할 수 있어야 함
20
Computer Graphics 20 과제물 추가 구현 사항 도형을 그룹화 해서 새로운 도형을 만듦 하트, 별, 꽃, 나비, 벌 등 수학 함수를 이용한 Field of “Flower” 마우스를 클릭한 지점에 다양한 모양의 꽃을 그려 줌 꽃잎의 표현은 수학 함수를 이용. 꽃밭은 여러 가지의 꽃이 존재하여야 함.
21
Computer Graphics 21 꽃잎 만드는 루틴 포트란 소스. PROGRAM SPAT CALL START(40,0) CALL SPIRO(12,7,5) STOP END SUBROUTINE SPIRO(A,B,D) INTEGER A,B,D,AMB PI=ACOS(-1,0) AMB=A-B THETA=0.0 THINC=PI*O.O2 N=B/ICF(A,B) NUM=N * 100 CALL MOVETO(FLOAT(AMB+D),0.0) DO 101 I=1,NUM THETA=THETA* THINC PHI=THETA*FLOAT(AMB)/FLOAT(B) X=FLOAT(AMB)*COS(THETA)+FLOAT(D)*COS(PHI) Y=FLOAT(AMB)*SIN(THETA)+FLOAT(D)*SIN(PHI) CALL LINETO(X,Y) END FUNCTION ICF(II,JJ) I=II J=JJ M=MOD(I,J) IF(M.NE. 0) THEN I=J J=M GOTO 99 ENDIF ICF=J RETURN END 왼쪽 코드 실행 결과
22
Computer Graphics 22 과제물 제출 및 평가 기준 제출물 실행파일, 보고서 자신이 구현한 부분의 소스 코드 포함, 문제 접근방법 및 알고 리즘 설명 평가기준 기본 요구사항의 구현 독창성 제출기한 준수
Similar presentations