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