WISHBONE System-on-Chip Interconnection Architecture for Portable IP Cores

Similar documents
5장 MFC기반 다지기

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

Visual C++의 개요

Microsoft PowerPoint - chap01-C언어개요.pptx

슬라이드 1

4S 1차년도 평가 발표자료

chap 5: Trees

untitled

Chapter 1. MFC 시작하기

슬라이드 1

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

윈도우시스템프로그래밍

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

윈도우시스템프로그래밍

Microsoft PowerPoint - hci2-lecture10.ppt

<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D>

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

DLL(Dynamic Linked Library)

설계란 무엇인가?

윈도우 프로그래밍의 개념

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

adfasdfasfdasfasfadf

MFC 프로그래밍

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

17장 클래스와 메소드

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

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

윈도우시스템프로그래밍

PowerPoint Template

슬라이드 1

윈도우시스템프로그래밍

Programming hwp

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - hci2-lecture7.ppt

Microsoft PowerPoint - hci2-lecture3.ppt

OCW_C언어 기초

Microsoft PowerPoint - chap06-2pointer.ppt

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

11장 포인터

Microsoft PowerPoint - chap-02.pptx

Microsoft PowerPoint - hci2-lecture3.ppt

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

PowerPoint Presentation

BMP 파일 처리

untitled

VISLAB 박제강 1. 시작하기전에영상관련알고리즘을개발하는과정에서작성한프로그램을테스트하고피드백하는작업은빈번하게발생한다. 이때기존콘솔 (Console) 형태로작성된프로그램의경우테스트작업을유동적으로조절할수없기때문에작업의효율이떨어진다. 반면 GUI(Graphical Use

Microsoft PowerPoint - chap-02.pptx

Microsoft PowerPoint - C++ 5 .pptx

03_queue

[제1강] 텍스트를 입력하세요

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

ISP and CodeVisionAVR C Compiler.hwp

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

슬라이드 1

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

PowerPoint Template

Microsoft PowerPoint - ch07 - 포인터 pm0415

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - CSharp-10-예외처리

Programming hwp

오버라이딩 (Overriding)

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

11장 포인터

PowerPoint 프레젠테이션

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

Chapter 4. LISTS

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Chap 6: Graphs

PowerPoint Presentation

Chapter #01 Subject

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

Chapter 4. LISTS

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

JAVA PROGRAMMING 실습 08.다형성

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

C++ Programming

PowerPoint 프레젠테이션

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

UI TASK & KEY EVENT

설계란 무엇인가?

Microsoft Word - hci08-final-answer.doc

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

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

API 매뉴얼

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

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

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

C++ Programming

Slide 1

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

Transcription:

컴퓨터공학설계및실험 I MFC programming 8 주차실험 MFC Programming Dept. of CS, Sogang Univ. 1

Programming with Visual Studio Visual Studio 의소개 Visual Studio : 프로그래머가손으로일일이전체코드를작성하는것이아니라마우스로그림을그리듯화면을디자인하고, 필요한곳에만코드를삽입하는발전된방식의개발도구 프로그래머가사용하기에매우쉽다. 윈도우내부동작에대한이해없이도프로그래밍을할수있다. C++ 혹은 C 라는언어를이용하여프로그램을쉽게개발할수있도록해주는환경 ( 컴파일러, 에디터, 디버거, 라이브러리등 ) 을제공한다. Dept. of CS, Sogang Univ. 2

Visual Studio 의구성 Visual Studio 의작업영역 프로젝트뷰 에디터영역 아웃풋영역 Dept. of CS, Sogang Univ. 3

Visual Studio 의구성 프로젝트뷰영역 프로젝트를구성하고있는여러요소들을일관성있게살펴볼수있도록해준다. 아래의세가지형태의뷰를제공한다. 클래스뷰 (Class View) : 소스코드를 C++ 클래스수준에서살펴보고조작할수있게해준다. 리소스부 (Resource View) : 애플리케이션에서사용하는여러가지리소스인다이얼로그박스, 아이콘, 메뉴등을찾아서편집할수있도록해준다. 파일뷰 (File View) : 애플리케이션을만드는데필요한모든파일을찾아볼수있게해준다. Dept. of CS, Sogang Univ. 4

Visual Studio 의구성 프로젝트뷰영역의세가지내용 <Solution Explorer> <Class View> <Resource View> Dept. of CS, Sogang Univ. 5

Visual Studio 의구성 에디터영역 Visual C++ 를사용하면서필요한모든편집을할수있는곳 아래의에디터를이영역에서사용가능 C++ 혹은 C 소스코드를편집할수있는코드에디터 다이얼로그박스를그릴수있는다이얼로그에디터 아이콘을그릴수있는아이콘에디터 아웃풋영역 컴파일진행과정시발생하는경고메시지, 에러메시지등을볼수있다. Visual C++ 디버거 (Debugger) 를실행시켰을경우에는실행중인모든변수들의값도볼수있다. Page 6 6

Visual Studio 의구성 Visual Studio 생성파일 Visual Studio 로개발되는프로그램은프로젝트단위로관리한다. 프로젝트 하나의프로그램을만들때필요한모든구성요소들에관한정보를갖는다. 어떤파일들이컴파일되고링크되어실행파일을만들어낼것인가에대한정보를갖는다. 프로젝트파일 : vcproj 솔루션 프로젝트및워크스페이스가한단계발전된형태 프로젝트의모든정보를포함함과동시에작업윈도우의여러가지설정상태및윈도우의위치등개발환경에대한정보까지갖는다. 솔루션파일 : sln Page 7 7

Visual Studio 의구성 Visual Studio 생성파일 (Cont ) 프로젝트를구성하고있는관련파일들 파일확장자 설명.h 헤더파일 ( 클래스정의파일 ).cpp /.c 소스파일.clw Class Wizard에서사용되는정보를보관하는파일.sln 솔루션파일.dsp 프로젝트파일.rc Resource가정의된파일.pch 프리컴파일헤더파일.pdb 프로그램정보파일.res.rc 파일이컴파일된바이너리파일 Res폴더 리소스에사용되는이미지를비롯한기타등등의파일이저장된폴더 Debug 폴더 컴파일후에생성되는파일 (.obj,.pch,.exe 등 ) 이들어있는폴더 Page 8 8

MFC 등장배경 운영체제의발전 16 비트텍스트기반의 DOS 에서 32 비트윈도우기반운영체제로전환. DOS 운영체제에서는대부분의응용프로그램이텍스트기반프로그램. 윈도우운영체제로넘어오면서그래픽기반 ( 윈도우형태 ) 프로그램으로전환. 구조적프로그래밍기법의한계 개발되어지는응용프로그램의규모가크고복잡해짐. 기존의 C 언어에의한구조적프로그램밍기법이한계를드러냄. C++ 에의한객체지향프로그래밍기법이해결책으로제시됨. 윈도우용응용프로그램개발환경의비효율성 SDK(Software Development Kit : 윈도우프로그래밍을위해제공되는툴과라이브러리로구성된소프트웨어패키지 ) 를이용한윈도우프로그래밍환경. DOS 프로그래밍을하던것처럼프로그래머자신이처음부터끝까지프로그램의코드를작성하는방식이기때문에생산성이떨어지고비효율적임. Dept. of CS, Sogang Univ. 9

MFC MFC(Microsoft Foundation Class) 란 Microsoft의 Visual C++ 컴파일러와함께제공되어지는윈도우응용프로그램제작을위한 C++ 클래스라이브러리. SDK에서 C 함수형태로제공되는기능을 C++ 클래스형태로포장해서객체지향프로그래밍을할수있도록함. 1992년 MS C/C++ 7.0 출시와함께최초버전의 MFC 1.0 등장이후계속적으로클래스들이추가되고있음. MFC 프로그래밍 기본적인소스코드를생성해주고사용자는최소한의코드만을작성. 코드의확장이쉽다 (extensibility). 코드를다시사용할수있다 (reusability). 유지보수하기가편리하다 (maintenability). 현재세계적으로널리쓰이고있는대부분의상용프로그램들이 MFC를이용하여만들어지고있음. Dept. of CS, Sogang Univ. 10

MFC 라이브러리 MFC 라이브러리의구성 (MFC Library Hierarchy) MFC 에는 Window application 의뼈대를이루는클래스, 그래픽관련클래스, 자료구조클래스및파일관련클래스등약 300 여가지의클래스가계층구조 로제공됨. 기반클래스 : MFC 대부분의클래스가상속받는클래스 그래픽클래스 : 그래픽기능을지원하기위한클래스 AFX 클래스 : MFC 모든프로그램이공통적으로수행하는기능들을구현해놓은클래스 CObject CCmdTarget CWinTread CFile CDC CInternetSession CInternetConnection 인터넷관련클래스 : 인터넷을이용한애플리케이션개발을위한클래스 CWinApp CGdiObject CFileFind CDocument CMenu CGopherLocator 윈도우클래스 : 윈도우오브젝트를구현한클래스 CWnd CFrameWnd CView CDatabase CDaoDatabase CAsyncSocket 데이터베이스클래스 : 데이터베이스에데이터를저장하고관리하는클래스 CDialog CControlBar CArray CList 자료구조클래스 : 자료구조와관련된클래스 그이외의클래스 CMap Dept. of CS, Sogang Univ. 11

MFC 의 AFX 클래스 AFX(Application Frameworks) 클래스 모든응용프로그램들이공통적으로수행하는기능들을구현해놓은것으로, MFC 로작성된프로그램의뼈대를이루는클래스 CFrameWnd : 프로그램외곽윈도우프레임을관리하는기능의클래스 CView : 데이터를보여주는윈도우를관리하는기능의클래스 CDocument : 데이터를저장하고처리하는기능의클래스 CWinApp : 프레임윈도우, 뷰, 도큐먼트를묶어주고, 프로그램을구동시켜주는역할을하는클래스 CFrameWnd CView CDocument 윈도우의프레임을관리데이터를보여주는윈도우데이터를저장, 처리 ( 눈에는안보임 ) CWinApp 위의세오브젝트를묶어주고, 프로그램을구동시킴 ( 눈에는안보임 ) Dept. of CS, Sogang Univ. 12

MFC 의 Document/View 구조 도큐먼트클래스와뷰클래스로분리한이유 기능을분리하고클래스역할을분담시킴으로서각클래스구현을단순화. 같은데이터라도보여주는방법이다양함. 도큐먼트클래스는데이터를처리 / 저장하는역할. 뷰클래스는도큐먼트클래스로부터데이터를가져와화면에보여주는역할. CDocument CView OnDraw() OnUpdate() GetDocument() 데이터를처리하고저장하는기능 UpdateAllViews() GetFirstView() GetNextView() 데이터를표시함 Dept. of CS, Sogang Univ. 13

MFC 의 Document/View 구조 도큐먼트와뷰객체간상호작용을위한함수들 View 객체에서쓰이는함수 GetDocument() : Doc 객체포인터반환 OnInitalUpdate() : 뷰의초기화작업을위해사용 ( 뷰의특정변수초기화등 ) OnDraw() : View 객체와연결된 Doc 객체의내용을화면에출력 OnPrint() : Doc 객체의내용을프린터로출력 OnPrepareDC() : OnDraw(), OnPrint() 함수호출전에호출 OnBeginPrinting(), OnEndPrinting() Docment 객체에서쓰이는함수 GetNextView() : 뷰리스트에서다음뷰를얻어옴 GetFirstView() : 뷰리스트에서첫번째뷰를얻어옴 UpDateAllViews() : Doc 객체의데이터가변경되면화면에다시뿌림 SetModifiedFlag() : Doc 객체의데이터가변경되었음을표시 DeleteContents() : Doc 객체가닫힐때마무리작업 ( 할당된메모리삭제등 ) Dept. of CS, Sogang Univ. 14

AppWizard 를이용한 MFC Programmnig AppWizard 시작 Dept. of CS, Sogang Univ. 15

AppWizard 를이용한 MFC Programmnig AppWizard 단계 1 Dept. of CS, Sogang Univ. 16

AppWizard 를이용한 MFC Programmnig AppWizard 단계 2 Dept. of CS, Sogang Univ. 17

AppWizard 를이용한 MFC Programmnig AppWizard 단계 3 Dept. of CS, Sogang Univ. 18

AppWizard 를이용한 MFC Programmnig AppWizard 단계 4 Dept. of CS, Sogang Univ. 19

AppWizard 를이용한 MFC Programmnig AppWizard 단계 5 Dept. of CS, Sogang Univ. 20

AppWizard 를이용한 MFC Programmnig AppWizard 단계 6 Dept. of CS, Sogang Univ. 21

AppWizard 를이용한 MFC Programmnig AppWizard 단계 7 Dept. of CS, Sogang Univ. 22

AppWizard 를이용한 MFC Programmnig AppWizard 단계 8 Dept. of CS, Sogang Univ. 23

AppWizard 를이용한 MFC Programmnig AppWizard 에의해생성된내용 <Solution Explorer> <Class View> <Resource View> Dept. of CS, Sogang Univ. 24

AppWizard 를이용한 MFC Programmnig AppWizard 에의해생성된내용 (Single Document Interface 인경우 ) 기본적으로 AppWizard 가만들어놓은 AFX 클래스의파생클래스들을갖는다. MFC 기반클래스 파생클래스 CObject CCmdTarge CWinApp CWaterfallApp CDocument CWaterfallDoc CWnd CFrameWnd CMainFrame CView CWaterfallView CDialog Dept. of CS, Sogang Univ. 25

AppWizard 를이용한 MFC Programmnig CWaterfallApp 전체프로그램관리하는클래스 프로그램초기화, 메시지루프 include, 프로그램종료 메인프레임, 뷰, 도큐먼트객체와리소스를유기적으로연결 CMainFrame 프로그램의메인윈도우관리 메뉴, 툴바가위치한 non-client 영역관리 CWaterfallDoc 뷰에출력되는데이터보관 디스크에데이터저장및로드 CWaterfallView 클라이언트영역 ( 뷰윈도우 ) 을관리 도큐먼트객체의데이터를화면이나프린터에출력 CWinApp CMainFrm CView CDocument Dept. of CS, Sogang Univ. 26

AppWizard 를이용한 MFC Programmnig AppWizard 에의해생성된내용 (Dialog Based 인경우 ) MFC 기반클래스 파생클래스 CObject CCmdTarge CWinApp CTreeCheckApp CDocument CWnd CFrameWnd CView CDialog CTreeCheckDlg Dept. of CS, Sogang Univ. 27

AppWizard 를이용한 MFC Programmnig CTreeCheckApp 전체프로그램관리하는클래스 프로그램초기화, 메시지루프 include, 프로그램종료 다이얼로그박스와리소스를유기적으로연결 CTreeCheckDlg 다이얼로그박스오브젝트를표현하는클래스 다이얼로그박스를처리하는데필요한기능구현 Dept. of CS, Sogang Univ. 28

MFC 프로그램의작동원리 프로그램의실행되면 CWinApp 클래스의 InitInstance() 함수에서도큐먼트클래스, 프레임윈도우클래스, 뷰윈도우클래스를등록시킨후, 프레임윈도우를호출하여보여준다. 시작 InitInstance() Run() ExitInstance() 종료 < CWinApp 클래스 > 무한루프 BOOL CMyApp::InitInstance() { CSingleDocTemplate* pdoctemplate; pdoctemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CMyDoc), // 도큐먼트클래스등록 RUNTIME_CLASS(CMainFrame), // 프레임윈도우클래스등록 RUNTIME_CLASS(CMyView)); // 뷰윈도우클래스등록 AddDocTemplate(pDocTemplate); return TRUE; } Dept. of CS, Sogang Univ. 29

MFC 프로그램의작동원리 무한루프상태에서메시지를기다리다가메시지를받으면해당메시지에맞는윈도우에게메시지를전달하여작업을수행토록함. 시작 InitInstance() 윈도우메세지 WM_CREATE WM_ACTIVATE WM_PAINT WM_MOUSEMOVE 발생하는상황윈도우가생성될때윈도우가활성또는비활성될때윈도우가다시그려져야할때윈도우위에서마우스가움직였을때 Run() ExitInstance() 종료 < CWinApp 클래스 > 무한루프 운영체제에의해메세지들이차례로메시지큐에추가됨 메시지큐 WM_MOUSEMOVE WM_PAINT WM_ACTIVATE WM_CREATE 종료메세지 (WM_QUIT) 를만날때까지메세지큐에서하나씩꺼내서처리 { } while(msg!= WM_QUIT){ switch(msg){ case WM_CREAT: } } OnCreate(); break; case WM_ACTIVATE: OnActivate(); break; case WM_PAINT: OnPaint(); break; Dept. of CS, Sogang Univ. 30

MFC 프로그램의작동원리 만약, 사용자가프로그램을종료시키면 CWinApp 클래스의 ExitInstance() 함수에서자신이관리하는모든객체들을소멸시키고사용된자원들을반환한후, 자신도소멸시킨다. 시작 InitInstance() Run() 무한루프 ExitInstance() 종료 < CWinApp 클래스 > Dept. of CS, Sogang Univ. 31

WIN-2 기초 MFC Programming I Tree Check 문제 노드의집합 V 와이에대한방향간선의집합 E 가주어졌을때 G=(V,E) 가 Tree 인지아닌지를결정하는프로그램을작성. G=(V,E) 가 Tree 가될수있기위한조건 예 : 1. V 에는정확히하나의 predecessor 가없는노드가존재한다 (root). 2. Root 를제외한모든노드는정확히하나의 predecessor 를갖는다. 3. Root 로부터각노드까지는정확히하나의경로 (path) 가존재한다. 5 1 3 2 5 8 4 6 7 3 6 2 3 6 2 9 5 4 8 4 Tree (a) Tree (b) Non-Tree (c) Dept. of CS, Sogang Univ. 32

WIN-2 기초 MFC Programming I 입력 입력은여러개의테스트케이스로구성되며입력의첫정수는테스트케이스의수를나타낸다. 각테스트케이스의첫줄에는간선들의개수가표시되고이어그만큼의간선에대한정보가정수쌍으로주어진다. 정수쌍의처음정수는방향간선의시작노드를나타내고두번째정수는그노드의 successor이다. 노드번호는항상 0보다크며간선의멤버로한번이상포함된다고가정한다. 예 : 테스트케이스수 쌍들의수 3 5 8 3 4 6 5 8 4 2 5 4 7 7 1 7 5 1 6 5 9 7 4 7 2 7 3 6 8 6 6 5 6 2 6 3 8 4 2 4 정수쌍 노드의수는최대 99 개로제한한다. 즉, 노드번호는 1-99 까지. Dept. of CS, Sogang Univ. 33

WIN-2 기초 MFC Programming I 출력 프로그램을수행하면아래에보인대화상자가나타나도록한다. 대화상자사용법 File 버튼 : 입력파일을검색하여, 이를입력받는다. Check 버튼 : 클릭할때마다입력된테스트에대한검사를순서대로수행하여트리여부를 RESULT 창에출력한다. Exit 버튼 : 프로그램을종료한다. Dept. of CS, Sogang Univ. 34

WIN-2 기초 MFC Programming I MFC 프로그래밍 MFC AppWizard를사용하여대화상자기반프로그램틀을생성한다 ( 교재 3-4, pp. 162-165). 대화상자편집 교재 3-5(pp.166-170) 의과정을통하여대화상자를편집한다. File, Check, Exit 버튼각각에대한멤버함수와멤버변수를추가하는과정을교재에서기술한단계에따라수행한다. 멤버함수 : TreeCheckDlg.cpp에 template가생성된다. OnFileOpen OnExit OnCheckTree Dept. of CS, Sogang Univ. 35

WIN-2 기초 MFC Programming I Tree Checking(Idea) 입력그래프의노드는 0보다큰정수로표시. 이러한정수의최대값을 N 이라고하면 N+1 개의정수배열 P[ ] 를마련하여이를 1로초기화. 각간선 <x, y> 에대하여다음을수행 : non_tree_flag 이 set 되어있거나 0 으로세팅된노드가둘이상있으면트리가 아니다. if ( P[x] == -1 ) P[x] = 0; // membership setting if ( P[y] <= 0 ) P[y] = x; // predecessor setting else set non_tree_flag; // has more than one predecessors 나머지세부적인사항은교재를참고한다. Dept. of CS, Sogang Univ. 36

WIN-2 기초 MFC Programming I 추가체크사항 앞에서조사한사항즉, predecessor의수가 root를제외하고모두 1이고 P[]=0인노드가단하나만존재하여도 tree가아닌경우가있다. 예 : 1 4 2 3 따라서, cycle 이존재하는지를추가로조사하는데아래의함수를사용한다. bool Cycle_Check ( int P[] ) { int flag[node_max_num], i, j; for(j = 0; j < NODE_MAX_NUM; j++){ if (P[j] <= 0 ) continue; for(i = 0; i < NODE_MAX_NUM; i++) flag[i] = -1; if ( dfs ( P, flag, j ) == true ) return true; // a cycle exists } return false; // no cycle } 5 bool dfs ( int P[], int flag[], int c){ flag[c] = 1; if ( P[c] == 0 ) return false; // no cycle else if ( flag[p[c]] == 1 ) return true; // cycle detected else return dfs(p, flag, P[c]); } NODE_MAX_NUM = 100. P[] : Predecessor 어레이. Dept. of CS, Sogang Univ. 37

WIN-2 기초 MFC Programming I 프로그램작성 교재의내용을참조하여작성한다. Dept. of CS, Sogang Univ. 38

WIN-2 기초 MFC Programming II Water Fall 문제 물받이용선반이벽면에임의로놓여있을때물이떨어져흐르는경로를계산하여화면에나타내는문제. 예 : 물받이를선분으로표시하고다음과같은가정을한다. 1. 주어진각선분은서로교차하지않는다. 2. 선분들의양끝점의 y 좌표는모두 0보다크다. 즉, 모든선분은 x 축위에있다. 3. 물이선분의끝에도달하면바로떨어진다고가정한다. 즉, 관성의법칙은무시한다. 4. 각점은임의의위치에존재할수있다 ( 단, x-축제외 ). 즉, 구멍이천장뿐아니라벽면에도있을수있다고가정한다. Dept. of CS, Sogang Univ. 39

WIN-2 기초 MFC Programming II 입력 첫번째줄은주어진선분의수 N( 0) 이다. 두번째줄부터 N 개의줄에는각선분의양끝좌표가 x l, y l, x r, y r 순으로표시된다. 여기서 (x l, y l ) 과 (x r, y r ) 은각각선분의왼쪽과오른쪽끝좌표이다. 선분에대한자료다음줄에는점의수 M 이주어지고그다음줄부터 M 개의점의좌표 (x, y) 가 M 개의줄로표시된다. 만일 N=0 인경우아무런선분이없다는의미이고따라서바로다음에 M 이표시되게된다. 예 : 선분의수 6 14 7 3 4 11 13 16 11 1 10 6 7 선분 2 1 4 3 16 17 22 13 12 5 23 3 점의수 4 10 4 14 14 점 2 13 19 8 Dept. of CS, Sogang Univ. 40

WIN-2 기초 MFC Programming II 출력 : 다음과같은윈도우를생성하여출력한다. Exit Exit File Open Select Dropping Point (Mark Red) Draw Waterfall Trajectory Dept. of CS, Sogang Univ. 41

WIN-2 기초 MFC Programming II 출력 : 파일읽기를 Click 한후입력파일을읽은직후 Dept. of CS, Sogang Univ. 42

WIN-2 기초 MFC Programming II 출력 : 를누를경우물의시작점이빨강색으로표시된다 ( 누를때마다차례로표 시 ). Dept. of CS, Sogang Univ. 43

WIN-2 기초 MFC Programming II 출력 : 를누르면현재빨강색으로표시된지점으로부터물의흐름을표시한다. Dept. of CS, Sogang Univ. 44

WIN-2 기초 MFC Programming II 문제해결방법 시작점및선분의자료구조 ( 좌표를배열에저장 ) 시작점의집합 S={s 1, s 2, } 선분의집합 P={p 1, p 2, } Dept. of CS, Sogang Univ. 45

WIN-2 기초 MFC Programming II 문제해결방법 물흐름경로구하기 1. S 에서현재활성화된 ( 빨강색 ) 점 s i 를가져온다. C = s i. 2. C 의아래로 C 와 y 축으로가장가까운거리에있는선분 p j 를 P 에서구한다. 3. 선분 p j 의최소 Y 좌표점으로 C 값을변경한다. 4. 위의단계 2, 3 를 C 가 X 축에닿을때까지반복적으로수행한다. 위의과정에의하여얻어지는물흐름자취를 linked list 로저장한다. 물흐름경로를그리는데사용. Dept. of CS, Sogang Univ. 46

WIN-2 기초 MFC Programming II 윈도우및버튼생성 교재에서설명하는내용대로생성한다. 함수작성 다음과같은함수를작성한다. 문제를푸는함수 F1. 초기화함수 : 새로운입력파일을처리하게전에전역변수를초기화하고, 배열, 리스트등을청소하는함수이다. F2. 파일읽기함수 : 파일로부터입력자료를읽어들여 S 와 P 를구성하는함수이다. F3. 물흐르는경로만드는함수 : 입력자료를토대로선택된시작점의경로를만들어 linked list 를구성하는함수. 윈도우에그리는함수 F4. 배경을그리는함수 : 입력데이터인선분과시작점을화면에그리는함수 F5. 선택된시작점을그리는함수 : 선택된시작점의경우다른시작점과다른색으로그려그시작점을알수있다. 을누름에따라시작점이차례로선택되어야하므로현재선택된시작점의 S에서의 index를기억하여두어야한다. F6. 물흐르는경로를그리는함수 : F3 에의하여만들어진 linked list 를이용하여물흐름을윈도우에그린다. Dept. of CS, Sogang Univ. 47

WIN-2 기초 MFC Programming II void CWaterfallView::OnDraw(CDC* pdc) 환경이바뀌면항상호출되는함수이다. 이함수내에서배경그리기함수 F4, 선택된시작점그리기함수 F5, 물흐름그리기함수 F6 를차례로호출한다. 그림은화면에항상덮어쓴다. 시작점이선택되지않았거나또는물흐름경로가계산되어있지않은경우아무것도그리지않도록한다. Invalidate(true) 이함수는강제로 OnDraw 를호출하게하는함수이다. 파일을읽었을때, 시작점을선택하였을때그리고물흐름경로를구하였을때이를호출하여그림이새로그려지도록한다. 나머지사항 교재를참고한다. Dept. of CS, Sogang Univ. 48