Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)

Slides:



Advertisements
Similar presentations
1 컴퓨터정보과 MFC 의 개요 MFC 윈도우 애플리케이션을 생성하기 위해 만들어진 C++ 클래스 라이브러리 애플리케이션 프레임워크를 제공 MFC 의 이점 윈도우 프로그램 전문가로 만들어 준다. 개발시간을 단축시키고, 이식성이 강한 코드를 작성 ActiveX, OLE,
Advertisements

Visual C++ Programming Document/View Architecture Department of Digital Contents Sang Il Park.
프로젝트 보고서 학과 : 임학과 학번 : 성명 : 조성환 Windows 프로그래밍.
Visual C++ Programming Document/View Architecture
컴퓨터 공학 설계 및 실험 I MFC programming
윈도우 프로그래밍 실습 김 창 헌.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
4장 영상 입출력 프로그램 만들기 비트맵 파일, MDI를 이용한 입출력 프로그램 (THU)
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷 MFC 응용 프로그램 마법사를 이용한 MFC 프로젝트 작성
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷
Lab 7 Guide: 멀티스레딩 예제 1 * 멀티스레딩을 이용한 파일 복사 프로그램 만들기 (교재 15장, 쪽)
Lab 6 Guide: 교재 14장 DLL 예제. Regular DLL 만들기 - 암시적 연결 ( 쪽) 명시적 연결 ( 쪽)
MFC Application Frameworks (AFX)
Lecture 2 MFC and Application Frameworks
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Visual C++ Programming Document/View Architecture 3
Kim Yeon Hee 제4_1장 대화상자 Kim Yeon Hee
제4장 대화상자.
Network Socket Programming
대화 상자기반 응용프로그램을 연습한다. 공통 대화상자를 다루는 방법을 배운다.. Chapter 06. 공통 대화상자 Section 01 공통 대화상자 클래스 Section 02 색상 대화상자 Section 03 파일 대화상자 Section 04 폰트 대화상자.
Image & Video processing
제 1 장 영상처리 기초.
Lab 3 Guide: 교재 4장 대화상자 예제. - 프로파일 입력 ( 쪽)
윤 홍 란 다이알로그(대화상자) 윤 홍 란
MFC 발전 과정과 주요 특징을 개괄적으로 이해한다.
윤 홍 란 MFC 기초 윤 홍 란
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
공통 컨트롤의 종류와 특징을 개관한다. 각종 공통 컨트롤의 사용 방법을 익힌다..
범용 소켓 클래스 만들기.
Lesson 9. 예외처리.
CH 1. MFC 전체보기 정보통신공학과 안 재 형.
MFC Application Frameworks (AFX)
Visual C++ Programming Output and File
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Visual C++ Programming Common Controls
대화상자 편집기의 사용법을 익힌다. 모드형 대화상자와 비 모드형 대화상자의 차이점을 이해하고 작성 방법을 익힌다.
Visual C++ Programming Output and File
Visual Basic .NET 처음 사용하기.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
제 3 장 영역 기반 처리.
13. 연산자 오버로딩.
자바응용.
Lab 4 보고서 교재 5장 사용자 인터페이스 예제 - 사용자 인터페이스 갱신
영상처리 실습 인공지능연구실.
GUI 소켓 애플리케이션 Chapter 08. * 학습목표 윈도우 GUI 애플리케이션의 구조와 동작 원리를 이해
MVC 모델을 이용한 웹 애플리케이션 작성 웹 애플리케이션 개발 순서를 알아본다 웹 애플리케이션의 실행 순서를 이해한다.
Lesson 2. 기본 데이터형.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
그래픽 모듈 편집.
Lab 9 Guide: 인터넷 프로그래밍 예제 * 일대일 채팅 프로그램 (교재 27장, 쪽)
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
GM7 PLC 모니터링 프로그램 한국 폴리텍 항공대학 항공정보통신과 송 승 일.
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
12. 상속 : 고급.
Chapter7. 도큐먼트와 파일 입출력 이 학 주.
영상처리 실습 (OpenCV + MFC) Chonbuk National University A.I. Lab.
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
3. 모듈 (5장. 모듈).
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
엔코더 프로그램 설명 // 쓰레드를 사용하기 때문에 변수와 핸들을 전역변수로 지정 HANDLE hDevice;
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
Presentation transcript:

Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 1262-1265쪽)

실습 목적 및 장비 실습 목적 장비: PC, 윈도우 운영체제, Visual Studio (VC++ 6.0) 인쇄 기능의 구현 방법 인쇄 관련 함수의 표현 및 이용 방법 좌표계 및 매핑 모드의 이해 페이지 처리 방법 프린터 DC의 획득 방법 장비: PC, 윈도우 운영체제, Visual Studio (VC++ 6.0)

1. 한 페이지의 그림 인쇄 예제 프로그램 개요 프로그램 골격 Single Document 애플리케이션 6.5절 드로잉 툴에 인쇄 기능 추가 (http://cs.sookmyung.ac.kr/class/06395/lec/exe/DrawZip.exe) 실행 파일 (http://cs.sookmyung.ac.kr/class/06395/lec/exe/Draw.exe) 프로그램 골격 뷰 클래스는 CView 대신 CScrollView에서 상속 (DrawView.h와 DrawView.cpp에서 모든 CView를 CScrollView로 교체)

한 페이지의 그림 인쇄 매핑 모드 및 스크롤 파라미터 설정 class CDrawView : public CScrollView { … public: CSize m_sizePage; void CDrawView::OnInitialUpdate() { … // A4 용지크기. MM_LOMETRIC은 0.1mm를 단위로 함 m_sizePage = CSize(2100, 2970); CSize sizeTotal = CSize(m_sizePage.cx, m_sizePage.cy); CSize sizePage(sizeTotal.cx/2, sizeTotal.cy/2); CSize sizeLine(sizeTotal.cx/100, sizeTotal.cy/100); SetScrollSizes(MM_LOMETRIC, sizeTotal, sizePage, sizeLine); }

한 페이지의 그림 인쇄 매핑 모드 및 스크롤 반영 void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) { CDrawDoc *pDoc = GetDocument(); m_pCurrentStroke = new CStroke(m_nPenThickness, m_PenColor); pDoc->m_strokeList.AddTail(m_pCurrentStroke); pDoc->SetModifiedFlag(); SetCapture(); // 논리 좌표계로 변환 CClientDC dc(this); dc.SetMapMode(MM_LOMETRIC); dc.DPtoLP(&point); m_ptPrev = point; CScrollView::OnLButtonDown(nFlags, point); } CWnd 멤버 함수들은 디바이스 좌표계를 사용하므로 OnLButtonDown() 함수의 파라미터 point도 디바이스 좌표계의 좌표 값이다. 따라서 이 값을 논리좌표계로 변환해 주어야 한다

점의 좌표를 저장할 때 현재 스크롤 위치를 반영함 void CDrawView::OnMouseMove(UINT nFlags, CPoint point) { if (GetCapture() != this) return; // 논리 좌표계로 변환 CClientDC dc(this); dc.SetMapMode(MM_LOMETRIC); dc.DPtoLP(&point); // 스크롤 반영 m_pCurrentStroke->m_ptArray.Add(point + GetScrollPosition()); CPen* pOldPen = dc.SelectObject(&m_CurrentPen); dc.MoveTo(m_ptPrev); dc.LineTo(point); dc.SelectObject(pOldPen); m_ptPrev = point; CScrollView::OnMouseMove(nFlags, point); } 점의 좌표를 저장할 때 현재 스크롤 위치를 반영함

2. 뷰를 이용하지 않는 프린터 출력 예제 프로그램 개요 프로그램 골격 다이얼로그 기반 애플리케이션 실행 파일 (http://cs.sookmyung.ac.kr/class/06395/lec/exe/DlgPrn.exe) 프로그램 골격 OnFileOpen() OnFileSave() OnFilePrint() Edit (m_strData)

뷰를 이용하지 않는 프린터 출력 파일 열기 파일 열기 대화 상자의 출력, CArchive 객체 생성, Serialize() 호출 void CDlgPrnDlg::OnFileOpen() { char szFilter[] = "Text Files(*.TXT)|*.TXT|All Files(*.*)|*.*||"; CFileDialog fileDlg (TRUE, "txt", NULL, OFN_HIDEREADONLY, szFilter); if(IDOK == fileDlg.DoModal()) CFile file(fileDlg.GetFileName(), CFile::modeRead); // 파일 읽기를 위한 CArchive 객체 생성 CArchive ar(&file, CArchive::load); // Serialize 함수 호출 Serialize(ar); }

뷰를 이용하지 않는 프린터 출력 파일 저장 파일 저장 대화 상자의 출력, CArchive 객체 생성, Serialize() 호출 void CDlgPrnDlg::OnFileSave() { char szFilter[] = "Text Files(*.TXT)|*.TXT|All Files(*.*)|*.*||"; CFileDialog fileDlg(FALSE, "txt", NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, szFilter); if(IDOK == fileDlg.DoModal()) CFile file(fileDlg.GetFileName(), CFile::modeWrite|CFile::modeCreate); CArchive ar(&file, CArchive::store); Serialize(ar); }

뷰를 이용하지 않는 프린터 출력 Serialize() 함수 void CDlgPrnDlg::Serialize(CArchive& ar) { if (ar.IsStoring()) // 파일 저장 UpdateData(); ar.WriteString(m_strData); } else // 파일 읽기 DWORD dwSize = ar.GetFile()->GetLength(); ar.Read(m_strData.GetBufferSetLength(dwSize), dwSize); UpdateData(FALSE);

뷰를 이용하지 않는 프린터 출력 OnFilePrint() 함수 void CDlgPrnDlg::OnFilePrint() { // 인쇄 다이얼로그 박스 출력 CPrintDialog printDlg(FALSE); if (printDlg.DoModal() == IDCANCEL) return; // 프린터 DC를 얻음 CDC dc; dc.Attach(printDlg.GetPrinterDC()); dc.m_bPrinting = TRUE; // 인쇄될 도큐먼트에 관한 정보 설정 CString strTitle; strTitle.LoadString(AFX_IDS_APP_TITLE); DOCINFO di; ::ZeroMemory (&di, sizeof (DOCINFO)); di.cbSize = sizeof (DOCINFO); di.lpszDocName = strTitle;

// 도큐먼트 인쇄 시작 BOOL bPrintingOK = dc.StartDoc(&di); // CPrintInfo에 인쇄 관련 정보 설정 CPrintInfo Info; Info.m_rectDraw.SetRect(0,0, dc.GetDeviceCaps(HORZRES), dc.GetDeviceCaps(VERTRES)); Info.SetMaxPage(1); // OnBeginPrinting 함수 호출 OnBeginPrinting(&dc, &Info);

// 페이지를 인쇄하는 루프 for (UINT page = Info.GetMinPage(); page <= Info.GetMaxPage() && bPrintingOK; page++) { dc.StartPage(); // 페이지 인쇄 시작 Info.m_nCurPage = page; OnPrint(&dc, &Info); // OnPrint 함수 호출 bPrintingOK = (dc.EndPage() > 0); // 페이지 인쇄 완료 } OnEndPrinting(&dc, &Info); // OnEndPrinting 함수 호출 if (bPrintingOK) dc.EndDoc(); // 도큐먼트 인쇄 종료 else dc.AbortDoc(); dc.Detach();

뷰를 이용하지 않는 프린터 출력 기타 함수 * 정의되는 모든 함수들은 CDlgPrnDlg 클래스 안에 선언되어야 함 (Class Wizard에 의해 또는 직접 DlgPrnDlg.h를 편집하여) void CDlgPrnDlg::OnBeginPrinting(CDC *pDC, CPrintInfo *pInfo) { } void CDlgPrnDlg::OnEndPrinting(CDC *pDC, CPrintInfo *pInfo) { } void CDlgPrnDlg::OnPrint(CDC *pDC, CPrintInfo *pInfo) { CRect rectBound(1000, -1000, 10000, -15000); UpdateData(); pDC->SetMapMode(MM_TWIPS); pDC->DrawText(m_strData, rectBound, DT_LEFT|DT_TOP); }

보고서 작성 요령 보고서 프로그램 소스 프로그램 설명 (AppWizard에 의해 생성된 부분은 제외)