MFC를 사용한 프로그램 작성 예제

Download Report

Transcript MFC를 사용한 프로그램 작성 예제

Microsoft Foundation Class (MFC) Library
 MFC (Microsoft Foundation Class) Library
• Windows 프로그래밍에 필요한 여러가지 기능을 class 형태로 제공함
• 사용자는 이 class를 상속받아 사용하면 됨
 MFC와 SDK (Software Development Kit)를 사용한 프로그램 작성 비교
사용자 프로그램
SDK
Windows XP
사용자 프로그램
MFC
SDK
Windows XP
프로그래밍 응용 #6
1
프로그램 작성 비교
 MFC와 SDK (Software Development Kit)를 사용한 프로그램 작성 비교
main() {
CMainFrame 생성
메모리 할당
그래픽 관련 최기화
…
메시지 처리 루틴
}
SDK 사용 프로그램
프로그래밍 응용 #6
MFC 사용
2
MFC를 사용한 프로그램 작성 예제
 아무 것도 하지 않는 Windows 프로그램을 한 번 만들어 봄
 File  New 선택
project 이름 및
경로 선택
MFC Application Wizard 선택
프로그래밍 응용 #6
3
MFC를 사용한 프로그램 작성 예제
 MFC Application Wizard – Step 1 : Single Document 선택
프로그래밍 응용 #6
4
MFC를 사용한 프로그램 작성 예제
 MFC Application Wizard – Step 2 - 5 : 계속해서 NEXT 선택
프로그래밍 응용 #6
5
MFC를 사용한 프로그램 작성 예제
 MFC Application Wizard를 사용하여 필요한 class 생성
프로그래밍 응용 #6
6
MFC를 사용한 프로그램 작성 예제
 Compile하여 실행시키면 다음과 같은 프로그램이 실행됨
 첫번째 Windows 프로그램을 만들었음.
프로그래밍 응용 #6
7
MFC를 사용한 프로그램 작성 예제
 생성된 프로그램은 기본적인 Windows 프로그램의 뼈대와 기능을 가지고 있음
• Window의 크기를 변경하거나 위치를 이동시킬 수 있음
• minimize, maximize, 종료 등의 기능이 가능함
 Windows의 기본기능 이외에는 어떠한 기능도 가지고 있지 않음.
• 지금부터 C++ 프로그램을 해서 우리가 원하는 기능을 구현해야 됨
 지정된 경로의 test directory에 여러가지 파일이 생겼음
• 나중에 이 파일들을 선택할 때에는 File  Open Workspace를 하여 test.dsw를 선택하면
됨.
프로그래밍 응용 #6
8
Application Wizard가 만든 class
 MFC의 class
거의 모든 MFC 클래스의 기반 클래스
CObject
커맨드 메세지를 받는 기능
CCmdTarget
CWinApp
CDocument
CWnd
프로그램을 구동시키는 기능
CTestApp
데이터를 저장하고 처리하는 기능
CTestDoc
윈도우에 관련된 기능 ( 눈에 보이는 오브젝트)
CFrameWnd
CView
프로그램 윈도우 프레임( 외곽) 을 관리하는 기능
CMainFrame
데이터를 보여주는 윈도우 관리하는 기능
CTestView
MFC의 base class
파생된 class
 4개의 class를 자동으로 만들었음
• CTestView, CTestApp, CMainFrame, CTestDoc
프로그래밍 응용 #6
9
class를 object 단위로 분리
 object 단위로 class를 분리하여 사용
• 간단한 프로그램의 경우에는 약간 귀찮은 면도 있음
CFram eWnd
CView
윈도우의 프레임( 틀) 을 관리 데이터를 보여주는 윈도우
CDocum ent
데이터를 저장, 처리
( 눈에는 안보임)
CWinApp
위의 세 오브젝트를 묶어주고, 프로그램을 구동 시킴 ( 눈에는 안보임)
프로그래밍 응용 #6
10
4개의 class 및 member 함수들
CMainFrame class
member function
프로그래밍 응용 #6
11
CWinApp class
 CWinApp 클래스의 역할
• 프로그램의 시작과 종료를 담당
• 프로그램이 시작될 때, 메인 프레임 윈도우를 생성
• 무한루프를 돌면서 메시지를 뿌려줌
• WM_QUIT 메시지를 만나면 무한루프를 빠져 나옴
• 프로그램을 전체를 대표하는 기능들을 수행
CWinApp
프로그램 시작
InitInstance( )
무한 루프
나머지 3개의 class도 여기서 만듬
Run( )
ExitInstance( )
프로그램 종료
프로그래밍 응용 #6
12
Windows의 메시지
 일반적인 Program
• main의 처음에서 시작하여 main의 끝에서 끝남
 Windows Program
• Event-driven program
• Windows XP에서 응용프로그램으로 계속해서 메시지를 보냄
• 응용프로그램에서는 주로 이 메시지를 처리하기 위한 프로그램을 작성함
 자주 사용되는 윈도우 메시지들
• WM_CREATE : 윈도우가 생성될 때
• WM_MOUSEMOVE : 마우스 커서가 움직였을 때
• WM_LBUTTONDOWN : 마우스 왼쪽 버튼이 눌렸을 때
• WM_LBUTTONUP : 마우스 왼쪽 버튼이 떼어졌을 때
• WM_LBUTTONDBCLK : 마우스 왼쪽 버튼이 더블 클릭 됐을 때
• …
• 질문 : 마우스를 double click 하면 발생되는 메시지는?
프로그래밍 응용 #6
13
Event Driven 프로그램
 Event Drvien
계속해서 메시지가 날라옴
Windows
응용프로그램
(여러분이 작성하는 프로그램)
메시지 무시 또는 처리
공부 열심히 해라!
아침에 일찍 일어나라
숙제 다음 주 까지 해 와라.
심부름 해라
프로그래밍 응용 #6
14
Event Driven 프로그램
 메모장 프로그램의 작성
• message 처리를 위해서 해야 할 일
가장 기본적인 메시지 처리기능은 이미
구현이 되어 있음
(예: x를 누르면 프로그램이 종료됨,
마우스로 Window를 이동할 수 있음)
keyboard를 눌렀을 때의 처리 루틴
(글자 저장 및 화면 출력)
메뉴 선택 처리 루틴
여러분이 작성해야 될 부분
프로그래밍 응용 #6
15
CWnd의 class의 메시지 처리기 (멤버함수임)
 메시지 처리기
• CWnd의 멤버함수
• 메시지가 발생되면 자동으로 실행됨
• 예:
-
WM_CREATE 메시지  OnCreate
WM_PAINT 메시지  OnPaint
WM_LBUTTONDOWN 메시지  OnLButtonDown
WM_LBUTTONUP 메시지  OnLButtonUp
WM_LBUTTONDBLCLK  OnLButtonDblClk
프로그래밍 응용 #6
16
WM_LBUTTONDOWN 메시지 처리 프로그램 추가
 View  ClassWizard 메뉴 선택
프로그래밍 응용 #6
17
OnLButtonDown 멤버함수가 추가됨
프로그래밍 응용 #6
18
추가된 메시지 핸들러
 마우스 왼쪽 버튼이 눌려졌을 때의 메시지 핸들러
• 뼈대가 있고 아무 내용은 없음  어떻게 할 것인지 추가해야됨
void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CView::OnLButtonDown(nFlags, point);
}
 CPoint class
• 멤버 변수 : x, y
• +, - 등의 연산자가 override 되어 있음
- CPoint p1;
- p1.x = 5; p1.y = 76;
프로그래밍 응용 #6
19
OnLButtonDown
 마우스 click 된 곳에 사각형을 그림
void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
dc.Rectangle(point.x-10,point.y -10,point.x+10,point.y+10);
// Rectangle(x1,y1,x2,y2)
CView::OnLButtonDown(nFlags, point);
}
 참고 : 좌표계
(x1,y1)
x
y
프로그래밍 응용 #6
(x2,y2)
20
WM_LBUTTONUP 메시지 처리 프로그램 추가
 다음 프로그램은 어떻게 동작하는가?
void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
CClientDC dc(this);
dc.TextOut(point.x-5,point.y-5,"O");
CView::OnLButtonDown(nFlags, point);
}
void CTestView::OnLButtonUp(UINT nFlags, CPoint point)
{
CClientDC dc(this);
dc.TextOut(point.x-5,point.y-5,"X");
CView::OnLButtonUp(nFlags, point);
}
프로그래밍 응용 #6
21
멤버변수의 추가
 Cview class에 멤버변수 추가
• 멤버변수의 초기화는 어디서 하는가?
프로그래밍 응용 #6
22