제8장 단일 문서 / 다중 문서...

24
윈도우 프로그래밍 설계 청주대학교 전자공학과 한철수 8장 단일 문서 / 다중 문서 프로그램

Upload: others

Post on 29-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

윈도우 프로그래밍 설계

청주대학교 전자공학과

한철수

제8장 단일 문서 / 다중 문서 프로그램

Page 2: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

목차

2

• 프로그램작성의 이해

• 단일 문서 프로그램 작성

• 다중 문서 프로그램 작성

제8장

Page 3: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

MFC 프로그램 종류

3

• 단일 문서 인터페이스프로그램‒ SDI(Single Document Interface) 프로그램

• 다중 문서 인터페이스프로그램‒ MDI(Multi Document Interface) 프로그램

• 대화상자기반 프로그램‒ Dialog-based 프로그램

8.1절

SDI MDI Dialog-based

Page 4: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

단일 문서 인터페이스 프로그램

4

• MFC는 4개의 클래스가 모여서 하나의 단일 문서 인터페이스프로그램을생성함.‒ CFrameWnd

• 윈도우 프레임을관리함.

‒ CView• 데이터를화면에 보여주거나사용자와상호작용함.

‒ CDocument• 데이터를읽거나 처리, 저장함.

‒ CWinApp• 프로그램을구동 시킴.

8.1절

Page 5: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

MFC 클래스 구성도

5

8.1절

CObject

CCmdTarget CWinApp

CWnd

CDocument

CDocTemplate

CFrameWnd

CDialog

CView

CCtrlView

CSingleDocTemplate

CMultiDocTemplate

• 각 클래스에대한 설명은 교과서 10~11쪽을참고하고, 보다 상세한내용은인터넷 검색또는 아래 사이트를참고할 것.

– https://docs.microsoft.com/en-us/cpp/mfc/reference/mfc-classes

(교과서 10쪽 그림)

Page 6: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

SDI 프로그램

6

• SDI(단일 문서 인터페이스) 프로그램은 한 번에 하나의 문서작업만이가능함.

• CSingleDocTemplate 클래스를이용해서 Document Template 객체를 구성함.

• Document 객체가 1개임.

8.1절

SDI

Document

View

객체구성관계

Page 7: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

MDI 프로그램

7

• MDI(다중 문서 인터페이스) 프로그램은 여러 개의 문서를 동시에 작업할 수 있음.

• CMultiDocTemplate 클래스를이용해서 Document Template 객체를 구성함.

• 새 문서가생성될 때 Document 객체가 새로 생성됨.

• Document 객체가 여러 개임.

8.1절

MDI 객체구성관계

Document 객체 1 Document 객체 2 Document 객체 3

View 객체 1 View 객체 2 View 객체 3

Page 8: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

SDI 프로그램 작성

8

• 만들고자하는 SDI 프로그램‒ 마우스를클릭하고움직이면그림이그려지는프로그램

‒ 사용하는윈도우메시지• WM_MOUSEMOVE

‒ 마우스가 움직일 때 발생하는 메시지

• WM_LBUTTONDOWN

‒ 마우스 왼쪽 버튼을 클릭했을 때 발생하는 메시지

8.2절

Page 9: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

멤버 변수 선언

9

• 변수 이름 작성법에 친숙해 지도록연습할 것.

8.2절

Page 10: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

멤버 변수 초기화

10

• 멤버 변수는 View 클래스의생성자에서초기화할것.‒ 생성자는객체가생성될때 한번 실행됨.

8.2절

생성자 초기화목록

Page 11: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

WM_MOUSEMOVE 메시지 처리

11

• 처리 함수에는 nFlags와 point가 넘어옴.‒ nFlags

• 메시지 발생시의키보드와마우스의상태 값이 저장되어있음.

‒ point• 메시지 발생시의마우스좌표 값(x, y)이 저장되어있음.

8.2절

Page 12: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

12

마우스왼쪽버튼이눌렸으면참이됨.

• 마우스왼쪽버튼이눌렸으면 if문 괄호가 if (MK_LBUTTON)이되는데C/C++ 언어에서는 0이아니면참임. 따라서 MK_LBUTTON은 0이아니므로참이됨.

8.2절

Page 13: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

13

보이지않는기준좌표(“현재위치”)를이동시킴.“현재위치”에서 (x, y)까지 선을그음.교과서 150쪽 참고.

마우스좌표값을멤버 변수에저장함.

8.2절

Page 14: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

WM_LBUTTONDOWN 메시지 처리

14

마우스좌표값을멤버 변수에저장함.

point가 m_reRect 영역의내부이면참을반환하고내부가아니면거짓을반환함.교과서 153쪽 참고.

m_reRect 영역만화면을갱신함.교과서 154쪽 참고.

8.2절

Page 15: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

OnDraw() 함수

15

• SDI/MDI 프로그램에는 WM_PAINT 메시지 처리함수로OnDraw() 함수가 준비되어있음.

DC를사용하려면주석을해제함.

DC를이용해글자를출력함.

미리정의된 GDI를불러오는함수교과서 153쪽참고

DC를이용해사각형을그림.

8.2절

Page 16: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

MDI 프로그램 작성

16

• 만들고자하는 MDI 프로그램‒ “새로 만들기”를 누를 때마다 기본 글자와 그림이 그려진 자식 창

(Child Window)이 열리는프로그램

8.3절

Page 17: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

멤버 변수 선언

17

• 변수 이름 작성법에 친숙해 지도록연습할 것.

• MDrawingDoc 클래스에추가할 변수‒ MDrawingDoc.h 파일의 “특성입니다. public:” 밑에추가

• MDrawingView 클래스에추가할 변수‒ MDrawingView.h 파일의 “특성입니다. public:” 밑에추가

8.3절

Page 18: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

멤버 변수 초기화

18

• 만들고자하는 프로그램‒ “새로 만들기”를 누를 때마다 기본 글자와 그림이 그려진 자식 창

(Child Window)이 열리는프로그램

• MDrawingDoc 클래스의멤버 변수 초기화‒ OnNewDocument() 함수

• “새로만들기”를누를 때 호출되는 함수

• MDrawingView 클래스의멤버 변수 초기화‒ OnInitialUpdate() 함수

• View가 표시되기 전, View가 Document와 연결된 직후에 호출되는 함수

8.3절

View와연결된 Document의포인터를반환함.

Page 19: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

OnDraw() 함수

19

• SDI/MDI 프로그램에는 WM_PAINT 메시지 처리함수로OnDraw() 함수가 준비되어있음.

DC를사용하려면주석을해제함.

구조체변수 rect를 선언함.

미리정의된 GDI를불러오는함수교과서 153쪽참고

DC를이용해사각형을그림.

8.3절

변수 rect의 값을저장함.

DC를이용해문자열을출력함.

Page 20: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

SDI 프로그램 작성 연습

20

• 만들고자하는 SDI 프로그램‒ 마우스좌표값을실시간으로보여주는프로그램

‒ 교과서 1장 31쪽

Page 21: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

멤버 변수 선언

21

• 변수 이름 작성법에 친숙해 지도록연습할 것.

• MouseMFCView 클래스에추가할 변수‒ MouseMFCView.h 파일의 “특성입니다. public:” 밑에 추가

Page 22: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

OnDraw() 함수

22

• SDI/MDI 프로그램에는 WM_PAINT 메시지 처리함수로OnDraw() 함수가 준비되어있음.

pDC를사용하지않고 CClientDC형객체 dc를선언함.CString형 객체 strPoint를 선언함.

객체 strPoint 내부의문자열을성형함.

DC를이용해문자열을출력함.

Page 23: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

WM_MOUSEMOVE 메시지 처리

23

• 처리 함수에는 nFlags와 point가 넘어옴.‒ nFlags

• 메시지 발생시의키보드와마우스의상태 값이 저장되어있음.

‒ Point• 메시지 발생시의마우스좌표 값(x, y)이 저장되어있음.

화면을갱신함. 화면을다시그림.교과서 154쪽 참고.

m_Pos에현재마우스좌표값을 저장함.

Page 24: 제8장 단일 문서 / 다중 문서 프로그램cis.cju.ac.kr/wp-content/lecture-materials/windows... · 2019-06-09 · 8 • 만들고자하는sdi 프로그램 ‒마우스를클릭하고움직이면그림이그려지는프로그램

질문

24

Q&A