MFC Application Frameworks (AFX)

Slides:



Advertisements
Similar presentations
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Advertisements

메시지 처리의 기본 개념 메시지 발생된 이벤트의 종류와 정보를 전달하는 일종의 상수 값 윈도우 프로그래밍 가장 중요한 것은 메시지를 처리하는 것 윈도우 시스템 Application 이벤트 발생 메시지 전송 메시지 처리 화면에 출력.
Visual C++ 구성. DevStudio –Visual C++ 를 실행시키면 전면에 뜨는 프로그램. – 텍스트에디터, 리소스에디터, 디버거 등 모든 기능 총괄 MFC(Microsoft Foundation Class) – 윈도우 프로그램을 만드는데 필요한 거의 모든.
CH5 디버그를 해보자 디버그 디버거 : 실행중인 응용 프로그램을 지정한 장소에서 정지하고, 그 시 점에서 변수, 메모리, 콜 스택의 내용을 참조하는것이 가능 Build -> Start Debug -> Go.
Visual C++ Programming Document/View Architecture Department of Digital Contents Sang Il Park.
프로젝트 보고서 학과 : 임학과 학번 : 성명 : 조성환 Windows 프로그래밍.
Visual C++ Programming Document/View Architecture
컴퓨터 공학 설계 및 실험 I MFC programming
Kim Yeon Hee 8장. 상속과 다형성 Kim Yeon Hee.
어서와 Java는 처음이지! 제3장선택과 반복.
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷 MFC 응용 프로그램 마법사를 이용한 MFC 프로젝트 작성
명품 C++ 8장 상속.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
윈도우 운영체제와 윈도우 응용 프로그램의 특징을 이해한다.
MFC Application Frameworks (AFX)
C++ Espresso 제1장 기초 사항.
Lecture 2 MFC and Application Frameworks
Visual C++ Programming Dialog Box
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
Visual C++ Programming Document/View Architecture 3
제 1 장 영상처리 기초.
MFC를 이용한 네트워크게임 졸업 프로젝트 담당 교수 : 김재형 교수님 김 성준 김 민기.
MFC 발전 과정과 주요 특징을 개괄적으로 이해한다.
실전 프로젝트 2 : 숫자야구 숫자 야구를 구현해보자.
윤 홍 란 MFC 기초 윤 홍 란
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
C++ Espresso 제9장 다형성.
10장 객체-지향 프로그래밍 II ©창병모.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
졸업작품발표 타자 연습 프로그램 By.. Eunju 담당 교수 : 이형원 교수님 학번 : 이름 : 김은주.
Network Socket Programming
Microsoft Visual C++ 제 1편 입문편 5장. 샘플 프로그램의 사용자화
상속이란? - 기반클래스로부터 다른 클래스를 파생하는 법 protected란? 가상함수 (virtual function)
Visual C++ Programming
Visual C++ Programming Common Controls
DataScience Lab. 박사과정 김희찬 (월)
C ++ 프로그래밍 시작.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 08. 상속과 다형성.
김 정 석 Web Programming 김 정 석
C++ 개요 객체지향 윈도우즈 프로그래밍 한국성서대학교 유일선
주소록 프로그램.
날짜: 팀명: TEAM-SIX 발표자: 이기영
DataScience Lab. 박사과정 김희찬 (월)
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
WAP Java Seminar
가상함수와 추상 클래스.
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Chapter3 : 객체지향의 개념 3.1 객체지향(object-oriented)과
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
비주얼 프로그래밍 1분반 화/목.
Lab 9 Guide: 인터넷 프로그래밍 예제 * 일대일 채팅 프로그램 (교재 27장, 쪽)
자바 5.0 프로그래밍.
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
Windows 프로그래밍 환경 및 MFC의 구조
C# 10장. 참조형.
6장 클래스(상속).
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
안드로이드 앱 분석 팀 기반의 설계 프로젝트 박민재
컴퓨터 계측 및 실습 C++ 기초 영남대학교 기계공학부.
C.
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
C++ 언어의 특징
Choi Younghwan CSE HUFS
프로그래밍 기법 최적화 프로그래밍.
발 표 자 : 7조 손 창 국 윤 오 성, 박 진 완 객체 지향 프로그래밍 C++
Presentation transcript:

MFC Application Frameworks (AFX) 제1회 지킴이 워크샵에서 필자가 발표한 강좌 내용입니다. 강좌 동영상의 해상도가 낮으니, 이 파일을 꼭 같이 참조하시기 바랍니다. 제1회 지킴이 워크샵은 지킴이(http://www.zikimi.co.kr) 주최, 영진출판사 주관, 마이크로소프트, 진솔문고, 서린정보기술 후원으로 98년 7월 12일 진솔문고 강당에서 개최되었습니다.

Object Oriented Programming

Object 분리 예

일관된 사용자 인터페이스

Application Frameworks (AFX) CDocument 데이터를 저장, 처리 (눈에는 안보임) CFrameWnd 윈도우의 프레임(틀)을 관리 CView 데이터를 보여주는 윈도우 CWinApp 위의 세 오브젝트를 묶어주고, 프로그램을 구동 시킴 (눈에는 안보임)

도큐먼트/뷰 분리의 이유

AFX 클래스의 계층 구조 거의 모든 MFC 클래스의 기반 클래스 커맨드 메세지를 받는 기능 프로그램을 구동시키는 기능 CCmdTarget CWinApp CDocument CObject CWnd CFrameWnd CView 거의 모든 MFC 클래스의 기반 클래스 커맨드 메세지를 받는 기능 프로그램을 구동시키는 기능 데이터를 저장하고 처리하는 기능 윈도우에 관련된 기능 (눈에 보이는 오브젝트) 프로그램 윈도우 프레임(외곽)을 관리하는 기능 데이터를 보여주는 윈도우 관리하는 기능

AppWizard MFC 기반 클래스 파생 클래스 CCmdTarget CWinApp CDocument CObject CWnd CFrameWnd CView MFC 기반 클래스 CMyApp CMyDoc CMainFrame CMyView 파생 클래스

Overloading void main( ) int Max(int a, int b) { { int ix = 2, iy = 3, ir; double fx = 2.0, fy = 3.0, fr; ir = Max(ix, iy); fr = Max(fx, fy); } int Max(int a, int b) { if(a > b) return a; else return b; } double Max(double a, double b)

Overriding void main( ) { Counter a; NewCounter b; a.Increase( ); class Counter { private: int count; public: void Increase( ){count++;} } class NewCounter : public Counter { void Increase( ) { Counter::Increase( ); ... void main( ) { Counter a; NewCounter b; a.Increase( ); b.Increase( ); }

Virtual Function

Static Binding class Base { public: void Show( ) { printf(“기반 클래스\n”); } class Derived : public Base printf(“파생 클래스\n”); void main( ) { Base base; Derived derived; base.Show( ); derived.Show( ); }

Static Binding class Base { public: void Show( ) { printf(“기반 클래스\n”); } class Derived : public Base printf(“파생 클래스\n”); void main( ) { Base base; Derived derived; Base *ptr; ptr = &base; ptr->Show( ); ptr = &derived; }

Dynamic Binding class Base { public: void Show( ) { printf(“기반 클래스\n”); } class Derived : public Base virtual void Show( ) { printf(“파생 클래스\n”); void main( ) { Base base; Derived derived; Base *ptr; ptr = &base; ptr->Show( ); ptr = &derived; }

CFrameWnd protected/private 멤버 멤버 함수 멤버 변수 CWinApp CDocument CView CMyApp 클래스의 인스턴스 (전역 변수)

CWinApp 프로그램의 시작과 종료 담당 프레임 윈도우 생성 메시지 루프 (무한루프) InitInstance( ); 전역 변수로 인스턴스 생성 프레임 윈도우 생성 메시지 루프 (무한루프) InitInstance( ); Run( ); ExitInstance( );

CWinApp 클래스의 동작 CWinApp 프로그램 시작 무한 루프 프로그램 종료 InitInstance( ) Run( ) ExitInstance( ) 프로그램 종료

CWinApp 파생 클래스의 동작 CMyApp 상 속 CWinApp 프로그램 시작 무한 루프 프로그램 종료 InitInstance( ) Run( ) 무한 루프 ExitInstance( ) 프로그램 종료

CWinApp 파생 클래스의 동작 CWinApp CMyApp 상 속 프로그램 시작 프로그램 종료 무한 루프 InitInstance( ) Run( ) ExitInstance( ) 프로그램 종료 무한 루프 InitInstance( ) ExitInstance( )

CWinApp 파생 클래스의 구현 class CMyApp : public CWinApp { public: CMyApp(); // Overrides virtual BOOL InitInstance(); };

CWinApp 파생 클래스의 구현 BOOL CMyApp::InitInstance() { CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CMyDoc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CMyView)); AddDocTemplate(pDocTemplate); return TRUE; }

CWnd 클래스 윈도우 제어용 멤버 함수 (100여 개) 메시지 핸들러 함수 (200여 개)

윈도우 메시지

메시지 큐 윈도우 오퍼레이팅 시스템 메시지 프로그램 메시지 큐 CWinApp::Run( ) { switch( ) case : } 메시지 핸들러 WM_CREATE WM_ACTIVATE OnCreate OnActivate OnMove WM_ACTIVATE WM_MOVE

CWnd 파생 클래스의 동작 CMyWnd 속 상 CWnd WM_CREATE WM_MOVE WM_SIZE OnCreate OnMove OnSize( ) CWnd WM_CREATE OnCreate OnSize( ) WM_MOVE WM_SIZE

ClassWizard

Message Map

파일 메뉴 처리

Serialize void CMyDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) // 저장하기 ar << n; } else // 읽어오기 ar >> n;

다중 도큐먼트 타입 MDI

Document Template BOOL CDrawApp::InitInstance() { // … CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_DRAWTYPE, RUNTIME_CLASS(CDrawDoc), RUNTIME_CLASS(CChildFrame), RUNTIME_CLASS(CDrawView)); AddDocTemplate(pDocTemplate); IDR_TEXTTYPE, RUNTIME_CLASS(CTextDoc), RUNTIME_CLASS(CTextFrame), RUNTIME_CLASS(CTextView)); }

도큐먼트 인스턴스 관리

OnFileNew void CDrawApp::OnFileNew() { POSITION pos = GetFirstDocTemplatePosition( ); CDocTemplate *pTemplate; for(int i=0 ; i<N ; i++) pTemplate = GetNextDocTemplate(pos); pTemplate->OpenDocumentFile(NULL); }

OnFileOpen

OnFileOpen void CDrawApp::OnFileOpen() { char szFilter[] = "Draw파일(*.drw), Text파일(*.txt) | *.drw;*.txt |모든파일(*.*)|*.*||"; CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter); if(dlg.DoModal( ) == IDOK) OpenDocumentFile(dlg.GetPathName()); } for(POSITION pos = dlg.GetStartPosition( ); pos != NULL ; ) OpenDocumentFile(dlg.GetNextPathName(pos));

AFX 클래스들 간의 상호 참조