제8장 단일 문서 / 다중 문서...
Transcript of 제8장 단일 문서 / 다중 문서...
윈도우 프로그래밍 설계
청주대학교 전자공학과
한철수
제8장 단일 문서 / 다중 문서 프로그램
목차
2
• 프로그램작성의 이해
• 단일 문서 프로그램 작성
• 다중 문서 프로그램 작성
제8장
MFC 프로그램 종류
3
• 단일 문서 인터페이스프로그램‒ SDI(Single Document Interface) 프로그램
• 다중 문서 인터페이스프로그램‒ MDI(Multi Document Interface) 프로그램
• 대화상자기반 프로그램‒ Dialog-based 프로그램
8.1절
SDI MDI Dialog-based
단일 문서 인터페이스 프로그램
4
• MFC는 4개의 클래스가 모여서 하나의 단일 문서 인터페이스프로그램을생성함.‒ CFrameWnd
• 윈도우 프레임을관리함.
‒ CView• 데이터를화면에 보여주거나사용자와상호작용함.
‒ CDocument• 데이터를읽거나 처리, 저장함.
‒ CWinApp• 프로그램을구동 시킴.
8.1절
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쪽 그림)
SDI 프로그램
6
• SDI(단일 문서 인터페이스) 프로그램은 한 번에 하나의 문서작업만이가능함.
• CSingleDocTemplate 클래스를이용해서 Document Template 객체를 구성함.
• Document 객체가 1개임.
8.1절
SDI
Document
View
객체구성관계
MDI 프로그램
7
• MDI(다중 문서 인터페이스) 프로그램은 여러 개의 문서를 동시에 작업할 수 있음.
• CMultiDocTemplate 클래스를이용해서 Document Template 객체를 구성함.
• 새 문서가생성될 때 Document 객체가 새로 생성됨.
• Document 객체가 여러 개임.
8.1절
MDI 객체구성관계
Document 객체 1 Document 객체 2 Document 객체 3
View 객체 1 View 객체 2 View 객체 3
SDI 프로그램 작성
8
• 만들고자하는 SDI 프로그램‒ 마우스를클릭하고움직이면그림이그려지는프로그램
‒ 사용하는윈도우메시지• WM_MOUSEMOVE
‒ 마우스가 움직일 때 발생하는 메시지
• WM_LBUTTONDOWN
‒ 마우스 왼쪽 버튼을 클릭했을 때 발생하는 메시지
8.2절
멤버 변수 선언
9
• 변수 이름 작성법에 친숙해 지도록연습할 것.
8.2절
멤버 변수 초기화
10
• 멤버 변수는 View 클래스의생성자에서초기화할것.‒ 생성자는객체가생성될때 한번 실행됨.
8.2절
생성자 초기화목록
WM_MOUSEMOVE 메시지 처리
11
• 처리 함수에는 nFlags와 point가 넘어옴.‒ nFlags
• 메시지 발생시의키보드와마우스의상태 값이 저장되어있음.
‒ point• 메시지 발생시의마우스좌표 값(x, y)이 저장되어있음.
8.2절
12
마우스왼쪽버튼이눌렸으면참이됨.
• 마우스왼쪽버튼이눌렸으면 if문 괄호가 if (MK_LBUTTON)이되는데C/C++ 언어에서는 0이아니면참임. 따라서 MK_LBUTTON은 0이아니므로참이됨.
8.2절
13
보이지않는기준좌표(“현재위치”)를이동시킴.“현재위치”에서 (x, y)까지 선을그음.교과서 150쪽 참고.
마우스좌표값을멤버 변수에저장함.
8.2절
WM_LBUTTONDOWN 메시지 처리
14
마우스좌표값을멤버 변수에저장함.
point가 m_reRect 영역의내부이면참을반환하고내부가아니면거짓을반환함.교과서 153쪽 참고.
m_reRect 영역만화면을갱신함.교과서 154쪽 참고.
8.2절
OnDraw() 함수
15
• SDI/MDI 프로그램에는 WM_PAINT 메시지 처리함수로OnDraw() 함수가 준비되어있음.
DC를사용하려면주석을해제함.
DC를이용해글자를출력함.
미리정의된 GDI를불러오는함수교과서 153쪽참고
DC를이용해사각형을그림.
8.2절
MDI 프로그램 작성
16
• 만들고자하는 MDI 프로그램‒ “새로 만들기”를 누를 때마다 기본 글자와 그림이 그려진 자식 창
(Child Window)이 열리는프로그램
8.3절
멤버 변수 선언
17
• 변수 이름 작성법에 친숙해 지도록연습할 것.
• MDrawingDoc 클래스에추가할 변수‒ MDrawingDoc.h 파일의 “특성입니다. public:” 밑에추가
• MDrawingView 클래스에추가할 변수‒ MDrawingView.h 파일의 “특성입니다. public:” 밑에추가
8.3절
멤버 변수 초기화
18
• 만들고자하는 프로그램‒ “새로 만들기”를 누를 때마다 기본 글자와 그림이 그려진 자식 창
(Child Window)이 열리는프로그램
• MDrawingDoc 클래스의멤버 변수 초기화‒ OnNewDocument() 함수
• “새로만들기”를누를 때 호출되는 함수
• MDrawingView 클래스의멤버 변수 초기화‒ OnInitialUpdate() 함수
• View가 표시되기 전, View가 Document와 연결된 직후에 호출되는 함수
8.3절
View와연결된 Document의포인터를반환함.
OnDraw() 함수
19
• SDI/MDI 프로그램에는 WM_PAINT 메시지 처리함수로OnDraw() 함수가 준비되어있음.
DC를사용하려면주석을해제함.
구조체변수 rect를 선언함.
미리정의된 GDI를불러오는함수교과서 153쪽참고
DC를이용해사각형을그림.
8.3절
변수 rect의 값을저장함.
DC를이용해문자열을출력함.
SDI 프로그램 작성 연습
20
• 만들고자하는 SDI 프로그램‒ 마우스좌표값을실시간으로보여주는프로그램
‒ 교과서 1장 31쪽
멤버 변수 선언
21
• 변수 이름 작성법에 친숙해 지도록연습할 것.
• MouseMFCView 클래스에추가할 변수‒ MouseMFCView.h 파일의 “특성입니다. public:” 밑에 추가
OnDraw() 함수
22
• SDI/MDI 프로그램에는 WM_PAINT 메시지 처리함수로OnDraw() 함수가 준비되어있음.
pDC를사용하지않고 CClientDC형객체 dc를선언함.CString형 객체 strPoint를 선언함.
객체 strPoint 내부의문자열을성형함.
DC를이용해문자열을출력함.
WM_MOUSEMOVE 메시지 처리
23
• 처리 함수에는 nFlags와 point가 넘어옴.‒ nFlags
• 메시지 발생시의키보드와마우스의상태 값이 저장되어있음.
‒ Point• 메시지 발생시의마우스좌표 값(x, y)이 저장되어있음.
화면을갱신함. 화면을다시그림.교과서 154쪽 참고.
m_Pos에현재마우스좌표값을 저장함.
질문
24
Q&A