윈도우 프로그래밍의 개념

Similar documents
<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D>

슬라이드 1

그래픽 프로그래밍

Visual C++의 개요

윈도우 프로그래밍의 개념

윈도우 프로그래밍의 개념

Microsoft PowerPoint - hci2-lecture10.ppt

DLL(Dynamic Linked Library)

윈도우 프로그래밍의 개념

5장 MFC기반 다지기

Microsoft PowerPoint - hci2-lecture7.ppt

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint Presentation

윈도우시스템프로그래밍

Microsoft Word - hci08-final-answer.doc

PowerPoint 프레젠테이션

Programming hwp

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

PowerPoint Presentation

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

untitled

윈도우시스템프로그래밍

Microsoft Word - src.doc

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

슬라이드 1

윈도우시스템프로그래밍

Microsoft PowerPoint - Java7.pptx

Programming hwp

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

Microsoft PowerPoint _파일입출력.ppt

C++ Programming

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

설계란 무엇인가?

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

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

PowerPoint Template

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

Chapter 1. MFC 시작하기

Microsoft PowerPoint - CPP_chap7_dialogbox(2)

쉽게 풀어쓴 C 프로그래밍

C++ Programming

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

Microsoft PowerPoint - Chapter 6.ppt

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

PowerPoint Template

PowerPoint Presentation

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

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

제11장 프로세스와 쓰레드

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

윈도우즈프로그래밍(1)

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

C 언어 프로그래밊 과제 풀이

JVM 메모리구조

슬라이드 1

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

chap 5: Trees

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

오버라이딩 (Overriding)

UI TASK & KEY EVENT

어댑터뷰

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

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P

17장 클래스와 메소드

Programming hwp

슬라이드 1

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

<BAF1C1EABEF320435F432B2B20C7D9BDC9C1A4B8AE2E687770>

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

tiawPlot ac 사용방법

설계란 무엇인가?

쉽게 풀어쓴 C 프로그래밍

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

4장기본프로그래밍2

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

JAVA PROGRAMMING 실습 08.다형성

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

이것은리스트뷰의 setadapter 메소드에잘표현되어있습니다. setadapter 는리스트뷰에사용할데이터객체를넘겨주는메소드입니다. 일반적으로생각한다면 ArrayAdapter 객체를생성하여사용할데이터를저장할것이고데이터가저장된 ArrayAdapter 객체를 setadapt

OCW_C언어 기초

Slide 1

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - hci2-lecture3.ppt

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

PowerPoint 프레젠테이션

11장 포인터

Microsoft Word - hci07-final-answer.doc

슬라이드 1

PowerPoint 프레젠테이션

윤성우의 열혈 TCP/IP 소켓 프로그래밍

PowerPoint Presentation

슬라이드 1

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

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

쉽게 풀어쓴 C 프로그래밍

PowerPoint Template

Transcription:

제 10 장다양한뷰클래스 10.1 도큐먼트 10.2 파일입출력 10.3 다양한뷰클래스 실습 10-1 Formview를이용한문자를출력하고파일입출력 10.4 분할윈도우 실습 10-2 정적분할윈도우를이용한학생정보프로그램 10.5 다중뷰 실습 10-3 다중뷰만들기

CDocument 클래스 데이터를관리하는클래스 OnNewDocument() 함수 새로운도큐먼트를만드는기능 Serialize() 함수 도큐먼트의내용을디스크로부터읽어오고, 저장하는기능 OnSaveDocument() 함수 OnOpenDocument() 함수

CArchive 클래스 표준 C++ 라이브러리 iostream 과유사 도큐먼트의데이터를읽고쓰는이진삽입및추출연산자를정의 CArchive & operator << (CArchive &, Type &); 저장 CArchive & operator >> (CArchive &, Type &); 읽기 IsStoring() 함수 현재데이터를저장하고있는중인지, 데이터를읽고오고있는중인지알아내는함수 데이터를저장중이면 TRUE, 읽어오고있는중이면 FALSE 를반환

Serialize() 함수 직렬화 (Serialization) 란하드디스크와같은저장매체에데이터를저장하고읽어들이는과정 기본적인기능은 CObject 클래스의 Serialize() 함수에정의 도큐먼트클래스가자기자신의데이터를관리하므로도큐먼트클래스에 Serialize() 함수를오버라이딩하여사용한다.

Serialize( ) 함수 Serialize( ) 함수 void CPractice10_1Doc::Serialize(Carchive& ar) { if (ar.isstoring()) { ar << m_strid // 파일에데이터를저장 } else { ar >> m_strid // 파일로부터데이터를읽음 } }

파일입출력 데이터를저장할때 OnSaveDocument() 함수가실행 CFile 클래스를이용하여해당하는파일을열어 CArchive 클래스를통로로데이터를저장 데이터를읽어올때 OnOpenDocument() 함수가실행 CFile 클래스를이용하여해당하는파일을열어 CArchive 클래스를통로로데이터를읽어옴 Serialize() 함수 파일을저장하거나읽어올경우최후에데이터를저장하거나읽어오는함수

다양한뷰클래스 CView 클래스에서파생된클래스 CCtrlView 클래스와 CScrollView 클래스로나뉜다. CCtrlView : 뷰에서컨트롤의기능을지원 CScrollView: 일반적인뷰클래스의속성 +AddOn

다양한뷰클래스 다양한뷰클래스의종류와기능 클래스이름 CView CCtrlView CEditView CListView CRichEditView CTreeView CScrollView CFormView CDaoRecordView CHtmlView COleDBRecordView CRecordView 기능모든뷰클래스의기저클래스컨트롤기능뷰클래스의기저클래스에디트관련기능을구현하는뷰클래스리스트컨트롤의기능을구현하는뷰클래스리치에디트컨트롤의기능을구현하는뷰클래스트리컨트롤의기능을구현하는뷰클래스스크롤이가능한뷰클래스대화상자기반의문서 / 뷰구조를갖는뷰클래스 DAO를지원하는뷰클래스 HTML을지원하는뷰클래스 OLE DB를지원하는뷰클래스 ODBC를지원하는뷰클래스

다양한뷰클래스 폼뷰 (FormView) SDI 형태의프로그램구조를가지면서컨트롤을사용할수있는형태 CView 클래스에서상속받은형태이기때문에 CMainFrame 의자식윈도우로서동작 대화상자처럼컨트롤을사용할수있다는점을제외하고는 CView 클래스에서상속받은 View 와다른점은없다.

실습 10-1 FormView 를이용한문자출력및입출력 폼뷰클래스내에서각컨트롤들을배치하고각컨트롤들을조작하여 Edit Control 에입력된글자를화면에출력 출력된문자의위치와문자의색을바꾸는프로그램을작성하는것 문자의위치, 색상, 내용을파일에저장하고여는기능을구현 폼뷰를이용한프로그램작성법및파일입출력을익힐수있다.

실습 10-1 프로그램작성순서 1) SDI 기반의프로젝트를생성한다. 마지막단계에서 View 클래스의기저클래스를 CFormView 로선택한다. 2) FormView 대화상자에컨트롤을배치하고속성을설정한다. Group Box, Edit Box, Button, Static Text 등 3) 컨트롤들을멤버변수에연결한다. 4) 필요한멤버변수를추가하고초기화한다. 입력한문자열의위치와색상을저장하는변수

실습 10-1 프로그램작성순서 5) Button 에대한메시지를처리한다. 입력한문자열을출력하는메시지함수 글자색상을변경하는메시지함수 글자를지우는메시지함수 글자의위치를변경하는메시지함수들 6) 윈도우에문자열을출력하게한다. OnDraw( ) 함수에서문자열을출력한다. 7) Serialize() 함수를구현한다. 8) 프로그램을실행시킨다.

실행결과 실습 10-1

분할윈도우 프레임의뷰영역을두개이상의영역으로나누어서보는것 동적분할윈도우 처음에는하나의뷰영역을나타내지만사용자가원하면뷰영역을나눌수있는것 정적분할윈도우 프로그램실행처음부터뷰영역이나누어져있는것 프로그램실행도중윈도우의영역을나눌수없다.

동적윈도우생성방법 응용프로그램마법사에서자동생성 [ 사용자인터페이스기능 ] 단계의 [ 주프레임스타일 ] 항목에서 [ 분할창 ] 항목을체크한다. 자동생성된소스 CSplitterWnd 클래스의객체를멤버변수로선언 CSplitterWnd m_wndsplitter; OnCreateClient() 함수 return m_wndsplitter.create(this, 2, 2, CSize(10, 10), pcontext);

정적윈도우생성방법 메인프레임클래스에 CSplitterWnd 클래스의객체를멤버변수로등록 클래스마법사에서 OnCreateClient() 함수를추가하고, CSplitterWnd 클래스의멤버함수인 CreateStatic() 함수를이용하여정적분할윈도우를생성한다. 각영역의특정뷰를설정하기위해서는 CreateView() 함수를이용한다.

실습 10-2 정적분할윈도우를이용한학생정보프로그램만들기 이번실습은정적분할윈도우를이용하여한쪽은리스트뷰, 다른한쪽은폼뷰를배치한다. 폼뷰에서학생정보를입력하고리스트뷰에서보여주는프로그램 입력한학생정보를수정, 삭제할수있도록한다.

실습 10-2 프로그램작성순서 1)SDI 기반의프로젝트를생성한다. 마지막단계에서 View 클래스의기저클래스를 CListView 로선택한다 2) 오른쪽분할영역에나타날폼뷰를생성한다. 대화상자를생성하고속성을설정한다. 속성에서 [styles] 에서 child 로 [Border] 에 None 대화상자에컨트롤을배치하고속성을설정한다. 생성된대화상자와연결할클래스를만든다. 3)Edit Control 들과멤버변수를연결한다.

실습 10-2 프로그램작성순서 4) 정적분할윈도우를설정한다. CSpiltterWnd 의객체생성 OnCreateClient() 함수추가 OnCreateClient() 함수에서 CreateView() 함수를이용하여분할윈도우를생성 5) 오른쪽리스트뷰에학생정보를추가한다. 추가버튼의명령핸들러함수작성 6) 오른쪽리스트뷰의학생정보를수정한다. 수정버튼의명령핸들러함수작성

실습 10-2 프로그램작성순서 7) 오른쪽리스트뷰의학생정보를삭제한다. 삭제버튼의명령핸들러함수작성 8) 프로그램을실행시킨다.

실행결과 실습 10-2

다중뷰 하나의도큐먼트에여러가지의뷰가설정된형태 분할윈도우와다른점 뷰화면이나누어지는것이아니라뷰자체가변경 분할윈도우도다중뷰라말할수있다.

실습 10-3 다중뷰만들기 이프로그램은폼퓨에서문자를입력하고도큐먼트에저장시킨상태에서 [ 보기 ] 메뉴의 [ 뷰전환 ] 항목을선택하면일반뷰의형태로바뀐다. 이때폼퓨에서도큐먼트에저장시킨문자가일반뷰에도출력이된다. 일반뷰상태에서다시 [ 보기 ] 메뉴의 [ 뷰전환 ] 항목을선택하면폼뷰의형태로바뀐다. 이번실습을통해다중뷰의개념과구현방법을익힐수있다.

실습 10-3 프로그램작성순서 1) SDI 기반의프로젝트를생성한다. [ 생성된클래스 ] 단계에서 View 클래스의기저클래스를 CFormView 로선택한다 2) 새로운뷰클래스를생성한다. 3) 폼뷰의대화상자에컨트롤을배치한다. 4) 다중뷰를위한코드를입력한다. 5) 메뉴에 [ 뷰전환 ] 항목을만든다.

실습 10-3 프로그램작성순서 6) 메뉴에대함메시지함수를작성한다. [ 뷰전환 ] 에대한메시지함수를작성한다. 7) 폼뷰에서입력한문자를도큐먼트에저장하고뷰전환시일반뷰에출력한다. 8) 프로그램을실행시킨다.

실행결과 실습 10-3

연습문제 10-1 폼뷰에서정보를입력한후 [ 확인 ] 버튼을누르면뷰영역에서마우스의움직임에따라정보가마우스를따라다니면서표시된다. 왼쪽마우스를누르면데이터를 5 번까지출력 오른쪽마우스를누르면출력된데이터를삭제하는프로젝트를작성

실행화면 연습문제 10-1

void CExercise10_1View::OnDraw(CDC* pdc) if (m_ncount <5) { } { } pdc->textout(m_ptfollow.x +10, m_ptfollow.y+10, pdoc->m_strdept); pdc->textout(m_ptfollow.x +10, m_ptfollow.y+30, pdoc->m_strname); pdc->textout(m_ptfollow.x +10, m_ptfollow.y+50, pdoc->m_strsex); pdc->textout(m_ptfollow.x +10, m_ptfollow.y+70, pdoc->m_strhobby); for(int i=0; i<m_ncount; i++) pdc->textout(m_ptfixate[i].x+10, m_ptfixate[i].y+10, pdoc->m_strdept); pdc->textout(m_ptfixate[i].x+10, m_ptfixate[i].y+30, pdoc->m_strname); pdc->textout(m_ptfixate[i].x+10, m_ptfixate[i].y+50, pdoc->m_strsex); pdc->textout(m_ptfixate[i].x+10, m_ptfixate[i].y+70, pdoc->m_strhobby);

void CExercise10_1View::OnMouseMove(UINT nflags, CPoint point) { // TODO: 여기에메시지처리기코드를추가및 / 또는기본값을호출합니다. m_ptfollow = point; Invalidate(); CView::OnMouseMove(nFlags, point); }

void CExercise10_1View::OnLButtonUp(UINT nflags, CPoint point) CMainFrame* pframe = (CMainFrame*)AfxGetMainWnd(); CExercise10_1Doc* pdoc = (CExercise10_1Doc*)pFrame->GetActiveDocument(); { { } { if(!pdoc->m_strname.isempty()) if(m_ncount<5) m_ptfixate[m_ncount] = point; m_ncount++; else AfxMessageBox(_T(" 글자는 5 개까지만출력할수있습니다.")); } } Invalidate();

void CExercise10_1View::OnRButtonDown(UINT nflags, CPoint point) CMainFrame* pframe = (CMainFrame*)AfxGetMainWnd(); CExercise10_1Doc* pdoc = (CExercise10_1Doc*)pFrame->GetActiveDocument(); { if(!pdoc->m_strname.isempty()) if (m_ncount > 0) m_ncount--; else if(afxmessagebox(_t(" 출력내용을삭제하겠습니까 "), MB_YESNO MB_ICONQUESTION)==IDYES) { } pdoc->m_strname.empty(); pdoc->m_strdept.empty(); pdoc->m_strsex.empty(); pdoc->m_strhobby.empty(); } else MessageBox(_T(" 삭제할내용이없습니다 ")); Invalidate();