Visual C++ Programming Output and File

Slides:



Advertisements
Similar presentations
법의 이념과 철학의 이해 법의 이념은 무엇일까 ? 정의 : 각자에게 각자의 몫을 주는 것 - 평등의 의미가 내포되어 있음 법적 안정성 : 법의 규정이 명확하고 잦은 변경 이 없어야 함 개인의 자유와 권리를 공공복지와 조화롭게 추구 – 사회질서와 안전유지 + 사회정의.
Advertisements

YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
CH5 디버그를 해보자 디버그 디버거 : 실행중인 응용 프로그램을 지정한 장소에서 정지하고, 그 시 점에서 변수, 메모리, 콜 스택의 내용을 참조하는것이 가능 Build -> Start Debug -> Go.
프로젝트 보고서 학과 : 임학과 학번 : 성명 : 조성환 Windows 프로그래밍.
Visual C++ Programming Document/View Architecture
컴퓨터 공학 설계 및 실험 I MFC programming
화일구조.
메뉴 용어 (1/6) 최상위 메뉴 = 메뉴 바 최상위 메뉴 = 메뉴 바.
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷 MFC 응용 프로그램 마법사를 이용한 MFC 프로젝트 작성
SYSTEM CALL (Syscall) CSLAB SEWON PARK.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
윈도우 운영체제와 윈도우 응용 프로그램의 특징을 이해한다.
C++ Espresso 제1장 기초 사항.
Lecture 2 MFC and Application Frameworks
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
Visual C++ Programming Document/View Architecture 3
Understanding of Socket and File I/O
다이얼로그 박스와 컨트롤 컴퓨터 계측 및 실습.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
Programming for the java Virtual machine
Lab 3 Guide: 교재 4장 대화상자 예제. - 프로파일 입력 ( 쪽)
1. C 언어의 이해와 컴파일러 설치.
MFC 발전 과정과 주요 특징을 개괄적으로 이해한다.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
윤 홍 란 MFC 기초 윤 홍 란
Department of Computer Engineering
Department of Computer Engineering
태양계 시뮬레이션 팀 명: 복학생 강유진 박지혜.
Computer Science & Engineering
1 C 언어의 이해와 컴파일러 설치 프로그래밍 환경을 구축하자!.
Part 14 파일 입출력 ©우균, 창병모 ©우균, 창병모.
Visual C++ Programming Controls - Buttons
Department of Computer Engineering
MFC Application Frameworks (AFX)
Department of Computer Engineering
MFC 프로그래밍에 관한 팁 / Keyboard / Timer
MFC 프로그래밍에 관한 팁 / Keyboard
Visual C++ Programming Keyboard & Timer
MFC UI for TS Analyzer 서울시립대학교 컴퓨터통계학과 최 용 진.
Visual C++ Programming Common Controls
Visual C++ Programming Output and File
7장 배열 배열의 정의 배열의 초기화 1차원 배열 2차원 및 다차원 배열 문자 배열 배열과 구조.
영상처리 시작하기 & 영상처리 프로그램 만들기
C ++ 프로그래밍 시작.
Visual C++ Programming Menu
프로그래밍2 및 실습 C언어 기반의 C++ 2.
Department of Computer Engineering
10장 C 표준 파일 입출력 子曰 學而時習(실습?)之 不亦悅乎.
날짜: 팀명: TEAM-SIX 발표자: 이기영
기업지원 제도 주요 내용 안산고용센터 기업지원팀.
Lab 4 보고서 교재 5장 사용자 인터페이스 예제 - 사용자 인터페이스 갱신
WAP Java Seminar
과학 탐구 토론 대회 1학년 2반 박승원 1학년 5반 권민성.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
쉽게 풀어쓴 C언어 Express 제2장 프로그램 작성 과정 C Express.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Lab 9 Guide: 인터넷 프로그래밍 예제 * 일대일 채팅 프로그램 (교재 27장, 쪽)
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
Department of Computer Engineering
C언어 개론.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
제5장 디버깅과 추적 문봉근.
캡슐화 (Encapsulation) 두원공과대학 소프트웨어개발과 이 원 주.
국어지도 유아교육과 권수연 김아람 중등특수교육과 박수진 양한솔
컨트롤, 프로퍼티, 이벤트.
C.
1 2 4 &
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
3장 파일 다루기 한빛미디어(주).
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
Presentation transcript:

Visual C++ Programming Output and File Department of Digital Contents Sang Il Park

Outline Review: Menu, toolbar and more Status bar How to use the debugger File I/O

Announcement 휴강공고: 중간고사: 4월 15일(화), 4월 17일(목) 4월 24일(목) 수업시간 문제 5문제 - 코딩시험

Review: 메뉴 생성 두 가지 방법 메뉴 리소스 프로그램 실행 중 메뉴 생성 메뉴 리소스 작성

Review: 메뉴 명령 처리 메뉴 명령 처리 과정 ① 명령 항목을 마우스나 키보드로 선택 ② WM_COMMAND 메시지 발생 (각각의 ID역시 전송) ③ WM_COMMAND 메시지 핸들러에서 메뉴 명령 처리

Review: 메뉴 명령 처리 속성 창을 이용

Review: 메뉴 명령 처리 메뉴 명령 처리 예: 3가지의 추가 1. Header file에 : 함수 선언 afx_msg void CChildView::OnColorRed() 2. Source file 앞 쪽에: Massage Map BEGIN_MESSAGE_MAP(CChildView,CWnd ) ... ON_COMMAND(ID_COLOR_RED, OnColorRed) END_MESSAGE_MAP() 3. Source file 속에: 함수 정의 void CChildView::OnColorRed() { }

Review: Toolbar 툴바 MFC 클래스 선택하면 WM_COMMAND 메시지 발생!

Review: 메뉴 직접 코딩하기 CMenu 객체: 메뉴의 생긴 모양, ID등을 생성 맴버함수: AppendMenu() Flag: MF_STRING (일반적인 메뉴 항목) MF_POPUP (하위 메뉴 연결 시) MF_SEPARATOR ID: MF_STRING 의 경우: Command ID MF_POPUP 의 경우: 붙일 하위 메뉴의 주소 (Detatch() 함수이용) bool CMenu::AppendMenu( Flag, ID, Caption )

Review: 컨텍스트 메뉴 1. 마우스 오른쪽 버튼 클릭 또는 키 누름 2. WM_CONTEXTMENU 메시지 발생 1. 마우스 오른쪽 버튼 클릭 또는 키 누름 2. WM_CONTEXTMENU 메시지 발생 3. 메시지 핸들러에서 메뉴를 띄우는 코드 작성 컨텍스트 메뉴 = 단축 메뉴 = 팝업 메뉴

Review: 컨텍스트 메뉴 사용 예 void CChildView::OnContextMenu(CWnd* pWnd, CPoint point) { CMenu menuPopup; menuPopup.CreatePopupMenu(); menuPopup.AppendMenu(MF_STRING, 201, "Red (&R)"); menuPopup.AppendMenu(MF_STRING, 202, "Green (&G)"); menuPopup.AppendMenu(MF_STRING, 203, "Blue (&B)"); menuPopup.TrackPopupMenu( TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x, point.y, AfxGetMainWnd()); }

이 밖의 메뉴 및 관련사항 교재 pp 260 ~ 263 시스템 메뉴 가속기(=Accelerator, Hot Key) 트레이 아이콘 및 메뉴

상태바 (Status Bar)

상태바 (1/4) 상태바 MFC 클래스

상태바 (2/4) 상태바 리소스 static UINT indicators[ ] = { ID_SEPARATOR, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, };

상태바 (3/4) 상태바 코드 class CMainFrame : public CFrameWnd { // 생략 ... protected: CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CChildView m_wndView; };

상태바 (4/4) 상태바 코드 (cont'd) int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { // 생략 ... if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) TRACE0("Failed to create status bar\n"); return -1; }

상태바에 정보 표시하기 상태바에 정보를 표시할 공간 마련 스트링 테이블 추가 상태바에 글쓰기 m_wndStatusBar.SetPaneText( 1 , “haha”); 구역 번호 상태바는 CMainFrame의 맴버변수로 존재 어떻게 CChildView에서 CMainFrame으로 갈 수 있을까?

상태바에 정보 표시하기 상태바에 정보를 표시할 공간 마련 스트링 테이블 추가 코드 내에서 매인프레임 포인터를 얻어오기 (CMainFrame *) AfxGetMainWnd() 얻어온 매인프레임을 통해 상태바에 접근 m_wndStatusBar (사전에 public으로 변경) 상태바에 글쓰기 m_wndStatusBar.SetPaneText(1, “haha”);

코딩 연습 마우스의 위치를 표시 1. status bar에 indicator 추가 2. WM_MOUSEMOVE 핸들러 추가 (CChildView) 3. SetPaneText 맴버함수 사용 위치 표시

코딩 연습 마우스의 위치를 표시 void CChildView::OnMouseMove(UINT nFlags, CPoint point) { CString str; str.Format("Mouse Position(%d, %d)", point.x, point.y); CMainFrame * pMain = (CMainFrame *) AfxGetMainWnd(); pMain->m_wndStatusBar.SetPaneText(1, str); CWnd::OnMouseMove(nFlags, point); }

TIP: debug 모드 활용법 Visual Studio의 2가지 Configurations: Release Debug 모드를 이용하여 compile F5 를 이용하여 실행 (Ctrl+F5 가 아님)

TIP: debug 모드의 장점 프로그램 실행 중 실시간 진단 가능 프로그램의 임시 중단 가능 (breakpoint) 임시 문자열 출력 (printf와 유사) 프로그램의 임시 중단 가능 (breakpoint) 변수 값 조회 현재 불리고 있는 함수의 경로

임시 문자열 출력 TRACE 함수 사용 Debug의 출력창(output)에 출력됨 마우스 위치 확인 예: 문법은 printf와 동일 Debug의 출력창(output)에 출력됨 마우스 위치 확인 예: TRACE ( … ); void CChildView::OnMouseMove(UINT nFlags, CPoint point) { TRACE("Mouse Position (%d, %d) \n", point.x, point.y); CWnd::OnMouseMove(nFlags, point); }

프로그램의 임시 중단 및 실행 추적 Breakpoint 사용: 변수 값 확인 실행 추적: F10/F11 지정/해제: F9 지역 변수 값 보여주기: Local (로컬) 지정한 변수 값 보여주기: watch (보기) 실행 추적: F10/F11

프로그램이 죽는 가장 큰 이유 메모리 에러 에러가 발생하면? 접근이 제한된 메모리로의 접근 대부분 배열의 범위의 문제 ex) a[-1]; Pointer의 잘못된 사용 에러가 발생하면? Debug 모드(F5)를 통해 다시 실행 Error가 발생하면 중단을 선택 Error의 원인을 파악 (Call Stack Check)

FILE I/O

개요 (1/2) 파일 입출력 방법 일반 파일 입출력 직렬화 CFile (파생) 클래스 Read(), Write() 등의 함수 이용 직렬화 CArchive 클래스 << 또는 >> 연산자 이용

개요 (2/2) MFC 클래스 계층도 파일 입출력 기능 제공 파생 클래스에 공통의 인터페이스 제공

CFile 클래스 핵심 입출력 연산 파일을 열거나 생성한다(Open). 파일 포인터의 위치에서 데이터를 읽는다(Read). 파일 포인터의 위치에 데이터를 쓴다(Write). 파일 포인터의 위치를 변경한다(Seek). 파일을 닫는다(Close).

CFile 로 파일 열기/생성 CFile file; file.Open( filename, mode, error ); 생성자를 이용한 파일 열기/생성 CFile file; file.Open( filename, mode, error ); CFile file ( filename, mode );

CFile 클래스 (1/6) CFile file; file.Open( filename, mode, error ); if( file.Open("mytest.txt", CFile::modeRead) == false) AfxMessageBox(_T(“Error”));

CFile 클래스 (1/6) CFile file; file.Open( filename, mode, error ); CFileException e; if(!file.Open("mytest.txt", CFile::modeReadWrite, &e)) e.ReportError();

CFile 클래스 (1/6) CFile file ( filename, mode ); 열기와 생성: 생성자의 사용 try { CFile file("mytest.txt", CFile::modeReadWrite); } catch (CFileException* e) e->ReportError(); e->Delete();

CFile 클래스 (2/6) 파일 접근/공유 모드 플래그 의미 CFile::modeCreate 파일을 무조건 생성한다. 같은 이름의 파일이 있다면 크기를 0으로 바꾼다. CFile::modeNoTruncate | 연산자를 이용하여 CFile::modeCreate 플래그와 더불어 사용하면 같은 이름의 파일이 있을 경우 크기를 0으로 바꾸지 않고 이 파일을 연다. CFile::modeRead 읽기 전용 모드으로 파일을 열거나 생성한다. CFile::modeReadWrite 읽기 및 쓰기 모드로 파일을 열거나 생성한다. CFile::modeWrite 쓰기 전용 모드로 파일을 열거나 생성한다. CFile::shareDenyNone 다른 프로세스에게 파일에 대한 읽기/쓰기를 허용한다. CFile::shareDenyRead 다른 프로세스에게 파일에 대한 읽기를 금지한다. CFile::shareDenyWrite 다른 프로세스에게 파일에 대한 쓰기를 금지한다. CFile::shareDenyExclusive 다른 프로세스에게 파일에 대한 읽기/쓰기를 금지한다.

CFile 클래스 (3/6) 파일 닫기: 소멸자에서 자동으로 닫아준다 void CExFileView::OnLButtonDblClk(UINT nFlags, CPoint point) { CFile file; CFileException e; if(!file.Open("mytest.txt", CFile::modeReadWrite| CFile::modeCreate, &e)){ e.ReportError(); return; } // 생략 ... } // -> CFile::~CFile() 함수가 호출된다.

CFile 클래스 (4/6) 닫기: Close 맴버 함수 이용 한 객체로 여러 파일을 다룰때 void CExFileView::OnLButtonDblClk(UINT nFlags, CPoint point) { CFile file; CFileException e; if(!file.Open("mytest.txt“, CFile::modeReadWrite|CFile::modeCreate| CFile::modeNoTruncate, &e)) e.ReportError(); return; } file.Close();

CFile 클래스 (5/6) 읽기와 쓰기 파일 포인터 위치 변경 UINT CFile::Read (void* lpBuf, UINT nCount) ; void CFile::Write (const void* lpBuf, UINT nCount) ; ULONGLONG CFile::Seek (LONGLONG lOff, UINT nFrom) ; nFrom 의미 CFile::begin 파일의 처음 위치부터 lOff만큼 파일 포인터 이동 CFile::current 현재의 파일 포인터 위치부터 lOff만큼 파일 포인터 이동 CFile::end 파일의 끝 위치부터 lOff만큼 파일 포인터 이동

CFile 클래스: 변수 저장 void CFile::Write (const void* lpBuf, UINT nCount) ; CFile file(_T(“test.txt“), CFile::modeRead); int a; int b; file.Write(&a, sizeof(a)); file.Write(&b, sizeof(b));

CFile 클래스: 변수 읽기 UINT CFile::Read (void* lpBuf, UINT nCount) ; CFile file; CFileException e; if(!file.Open("test.txt", CFile::modeRead, &e)){ e.ReportError(); return; }; int a,b; file.Read(&a, sizeof(a)); file.Read(&b, sizeof(b)); CString str; str.Format("a=%d b=%d", a, b); AfxMessageBox(str);

CFile 클래스 (6/6) 기타 함수 CFile::GetLength(), CFile::SetLength() 파일의 현재 크기를 얻거나 변경한다. CFile::GetPosition() 현재의 파일 포인터 위치를 얻는다. CFile::LockRange(), CFile::UnlockRange() 파일의 일정 영역을 잠그거나 해제한다. 잠근 영역은 다른 프로세스가 접근할 수 없다. CFile::GetFilePath(), CFile::GetFileName() 파일의 전체 경로(Full Path)와 이름을 얻는다.

CMemFile 클래스 메모리 속에 가상의 파일을 만들어 줌 void CExFileView::OnLButtonDblClk(UINT nFlags, CPoint point) { CMemFile file; // 메모리 파일에 쓰기 int a = 100; file.Write(&a, sizeof(a)); // 메모리 파일에서 읽기 file.SeekToBegin(); int b; file.Read(&b, sizeof(b)); TRACE("b = %d\n", b); }

CStdioFile 클래스 (1/2) Text 파일을 읽고 열 때 쓰는 것 문자열을 읽어오는 함수: ReadString 문자열을 기록하는 함수: WriteString CString str; file.ReadString(str); CString str =_T(“Output”); file.WriteString(str);

CStdioFile 클래스 (2/2) 문자를 읽어서 대문자로 바꿔 저장하는 예 CStdioFile file1; file1.Open("test1.txt", CFile::modeRead); CStdioFile file2; file2.Open("test2.txt", CFile::modeWrite|CFile::modeCreate); CString str; while(file1.ReadString(str)) { str.MakeUpper(); file2.WriteString(str + "\n"); }

CFileFind 클래스 (1/2) 로컬 디스크에 대한 파일 검색 제공 MFC 클래스 계층도 사용법 FineFile() 맴버 함수 사용 MFC 클래스 계층도 CFileFind finder; bool bExist = finder.FindFile(“MyText.txt”);

CFileFind 클래스 (2/2) 사용 예: 현재 디렉토리의 모든 파일을 보여줌 CFileFind finder; 사용 예: 현재 디렉토리의 모든 파일을 보여줌 CFileFind finder; BOOL bWorking = finder.FindFile("*.*"); while(bWorking) { bWorking = finder.FindNextFile(); if(finder.IsDirectory()) TRACE("[%s]\n", (LPCTSTR)finder.GetFileName()); else TRACE("%s\n", (LPCTSTR)finder.GetFileName()); }