MFC 발견 (1)

39
MFC 발견 첫번째 주제 GUI 프로그래밍과 MFC 소개 MFC를 통해 우리가 배울 수 있는 거 첫번째 예제 ↑ 시바견
  • Upload

    -
  • Category

    Software

  • view

    813
  • download

    1

Transcript of MFC 발견 (1)

Page 1: MFC 발견 (1)

MFC 발견

첫번째 주제

• GUI 프로그래밍과 MFC 소개

• MFC를 통해 우리가 배울 수 있는 거

• 첫번째 예제

↑ 시바견

Page 2: MFC 발견 (1)

우리가 그 동안 해왔던 것

누구한테 보여주기도 민망하다…

Page 3: MFC 발견 (1)

만들고 싶은 거

도스 창 말고 제대로 된 창을

보여주고 싶다!

Page 4: MFC 발견 (1)

꼭 MFC로 해야 하나?

No! MFC말고도 방법은 많다!

그치만 MFC는 비주얼 스튜디오에서

지원하니까 무진장 편하다.

순식간에 창이며 버튼들을

만들 수 있다.

또한, MFC는 아직도 많이 쓴다.

MS에서는 버렸지만..

Page 5: MFC 발견 (1)

MFC 말고 어떤 게 있을까?

• Windows API를 이용한다. (강의시간에 말한 SDK!!!)

• 자바 GUI 개발을 한다. (AWT, Swing..)

• Qt나 GTK 등의 라이브러리를 이용한다(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)

• [닷넷] WinForms나 WPF를 이용한다

교재 34쪽 SDK

교재 35쪽 .NET

Page 6: MFC 발견 (1)

MFC 말고 어떤 게 있을까?

• Windows API를 이용한다. (강의시간에 말한 SDK!!!)

• 자바 GUI 개발을 한다. (AWT, Swing..)

• Qt나 GTK 등의 라이브러리를 이용한다

(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)

• [닷넷] WinForms나 WPF를 이용한다

손이 너무 많이 가고, 생산성이 떨어진다.

Page 7: MFC 발견 (1)

MFC 말고 어떤 게 있을까?

• Windows API를 이용한다. (강의시간에 말한 SDK!!!)

• 자바 GUI 개발을 한다. (AWT, Swing..)

• Qt나 GTK 등의 라이브러리를 이용한다

(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)

• [닷넷] WinForms나 WPF를 이용한다

다양한 OS지원/안드로이드 개발

MFC배우면 조금만 공부하면 OK

Page 8: MFC 발견 (1)

MFC 말고 어떤 게 있을까?

• Windows API를 이용한다. (강의시간에 말한 SDK!!!)

• 자바 GUI 개발을 한다. (AWT, Swing..)

• Qt나 GTK 등의 라이브러리를 이용한다

(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)

• [닷넷] WinForms나 WPF를 이용한다

다양한 OS지원/다양한 언어 지원

MFC배우면 조금만 공부하면 OK

리눅스에서는 많이 쓴다.

Page 9: MFC 발견 (1)

MFC 말고 어떤 게 있을까?

• Windows API를 이용한다. (강의시간에 말한 SDK!!!)

• 자바 GUI 개발을 한다. (AWT, Swing..)

• Qt나 GTK 등의 라이브러리를 이용한다

(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)

• [닷넷] WinForms나 WPF를 이용한다

MS에서 야심차게 준비한 것!

최근엔 리눅스도 지원한다더라

앞으로 알아두면 좋음.

MFC배우다가 가면 신세계!

Page 10: MFC 발견 (1)

MFC 말고 어떤 게 있을까?

• 델파이

• 비주얼 베이직

…그냥 넘어가자

교재 34쪽RAD, 클래스 라이브러리

Page 11: MFC 발견 (1)

MFC가 왜 나왔나?

vs

HelloSDK.cpp HelloMFC.cpp

교재 35쪽 (여기서 잠깐)

교재 55쪽 (여기서 잠깐)

Page 12: MFC 발견 (1)

MFC가 왜 나왔나?

vs

HelloSDK.cpp HelloMFC.cpp

짱 편하다!

교재 35쪽 (여기서 잠깐)

교재 55쪽 (여기서 잠깐)

Page 13: MFC 발견 (1)

이것이 어떻게 가능한가?

C++ 시간을 회상하며…

<Class, 객체지향>

상속

추상화

캡슐화

은닉화

다형성

그때는 그저 그냥 외웠던 것들..

이제 써먹는다!

CFrameWnd는 어디에 있고

Create() 는 도대체 뭐 하는 놈이야?

Page 14: MFC 발견 (1)

교재 p48-55를 꼭! 읽어보자!

특히 54, 55쪽

Page 15: MFC 발견 (1)

atlmfc\src\mfc\wincore.cpp

HelloSDK.cppHelloMFC.cpp

Page 16: MFC 발견 (1)

atlmfc\src\mfc\wincore.cpp

HelloSDK.cppHelloMFC.cpp

Page 17: MFC 발견 (1)

atlmfc\src\mfc\wincore.cpp

HelloSDK.cppHelloMFC.cpp

Page 18: MFC 발견 (1)

atlmfc\src\mfc\wincore.cpp

HelloSDK.cppHelloMFC.cpp

Page 19: MFC 발견 (1)

atlmfc\src\mfc\wincore.cpp

HelloSDK.cppHelloMFC.cpp

즉, MFC는 SDK를

쓰기 편하게 만든 것에 불과.

Page 20: MFC 발견 (1)

이것들 다 기억하려고 하지 말고,

아하! 이래서 그렇구나! 하고 넘어 갑시다!

자세히 몰라도 되는 내용이지만

“원리와 구조를 알면 MFC 전반적인 이해와 구조 파악에 큰 도움이 된다!”

주의사항!

Page 21: MFC 발견 (1)

이것이 어떻게 가능한가?

C++ 시간을 회상하며…

<Class, 객체지향>

상속

추상화

캡슐화

은닉화

다형성

그때는 그저 그냥 외웠던 것들..

이제 써먹는다!

하나의 MFC라는 캡슐

그 캡슐 안에 들어가있는수 많은 SDK 코드들

교재 51쪽 2,3번

Page 22: MFC 발견 (1)

(캡슐화 관점에서 본) 객체지향의 prog&cons

• 사용하기 편하다! 코드가 줄어든다.

• 개발자가 알아야 할 내용들이 줄어든다. (부담이 적다)

• 반대로, 한번에 이해하기 어렵다

• 문제가 발생했을 때 멘붕이 온다.

Page 23: MFC 발견 (1)

Main 함수는 어디 갔다 버렸어요?

너무 캡슐화를 하다 보니..

Main이 어디로 가버렸어요…

교재 51쪽 3번마지막 줄

Page 24: MFC 발견 (1)

Main 함수도 사실 숨겨져 있습니다.(캡슐화)

tchar.h

atlmfc\src\mfc\appmodul.cpp

atlmfc\src\mfc\winmain.cpp

HelloMFC.cpp

1

2

3

MFC의 메인이라고 생각하면 쉽다.

Page 25: MFC 발견 (1)

Main 함수도 사실 숨겨져 있습니다.(캡슐화)

tchar.h

atlmfc\src\mfc\appmodul.cpp

atlmfc\src\mfc\winmain.cpp

HelloMFC.cpp

1

2

3

숨겨져 있기에

어렵고 난해했던 것 일뿐!

Page 26: MFC 발견 (1)

진입점(Entry Point)에 대해 알아봅시다.

그게 뭔데? 메인 함수!

https://en.wikipedia.org/wiki/Entry_point

컴퓨터 프로그래밍에서,

Entry point는 프로그램으로 들어가는

제어영역이거나,

실행 시작의 코드 부분이다.

이게 메인 함수지 뭐야!

Page 27: MFC 발견 (1)

진입점(Entry Point)에 대해 알아봅시다.

• 진입점은 언어와 컴파일러와의 약속이다. (정확히 말하자면 컴파일러가 아니라 Linker다)

• C언어에서는 main 이라고 약속 했을 뿐!

https://msdn.microsoft.com/ko-kr/library/f9t8842e.aspx

Page 28: MFC 발견 (1)

진입점(Entry Point)에 대해 알아봅시다.

https://msdn.microsoft.com/ko-kr/library/f9t8842e.aspx

Page 29: MFC 발견 (1)

WinMain은 또 뭔가요?

• 윈도우 프로그램을 개발할 때 사용하는 WinMain함수!

• MS에서는 윈도우 프로그램의 진입점 함수를 WinMain이라고 약속했다.

아하! 그래서 HelloSDK.cpp에서 WinMain 함수를 썼구나!

교재 40쪽 2번

Page 30: MFC 발견 (1)

WinMain은 또 뭔가요?

• 아하! 그래서 HelloSDK.cpp에서 WinMain 함수를 썼구나!

HelloSDK.cpp

고민해결!

Page 31: MFC 발견 (1)

main vs WinMain

• main: 콘솔창의 잔재가 남아있다.

• WinMain: 진정한 윈도우 개발의 시작. 창으로 시작한다.

HelloMain.cpp

Page 32: MFC 발견 (1)

진입점(Entry Point)에 대해 더 알아봅시다.

• 사실 진짜 진입점은 Main 함수가 아닙니다.

• Main 보다도 더 먼저 실행되는 녀석이 있습니다. 이 녀석이 바로 진입점입니다.

이 녀석들은 C 런타임(C RunTime) 메인 (CRT main) 이라고 합니다.

Page 33: MFC 발견 (1)

진입점(Entry Point)에 대해 알아봅시다.

진입점의 역할• 필요한 것들을 불러오고 전역변수 등과 같이 필수적인 초기화를 한다.

CRT main Main (혹은 WinMain)

main 일 때: 콘솔창

WinMain 일 때: 콘솔창 X

CRT main 이 결정한다!(CRT main에서 콘솔창 생성)

Page 34: MFC 발견 (1)

theApp 원리 알아보기

• 실행결과는?

MFC_0.cpp

Page 35: MFC 발견 (1)

이제 만들어 봅시다.

MFC_1.cpp

꼭 CWinApp 객체가

하나 만들어져야 한다!

Page 36: MFC 발견 (1)

사실 여기까진 몰라도 돼요. But!

이러한 지식들이 쌓이다 보면 분명 도움이 됩니다. 정말 어려운 상황에서 말이죠!

(1) 번은 보통 CRT 라이브러리가 제대로 설치 않았거나 exe가 정상이 아닐 때 나타나는 오류.

(2) 번에서 입력하지도 않은 invoke_main이 갑자기 튀어나온 이유는 바로 오타가 나는 바람에 WinMaim 이라고

입력했기 때문입니다. WinMain보다 먼저 실행되어 초기화 등을 한 다음에 WinMain을 호출 하는 함수가

WinMain을 찾을 수 없기 때문입니다.

Page 37: MFC 발견 (1)

오늘 내용 정리

• MFC말고도 많지만, MFC를 가장 많이 쓴다.

• MFC는 SDK보다 코드가 짧다. (생산성 크다)

사실 MFC안에는 엄청난 SDK코드들이 캡슐화 되어있다.

MS 개발자들 고생 좀 했겠어요..

• 윈도우 플밍에서는 WinMain 함수를 쓴다. (진입점)

• MFC에서는 WinMain 조차 감춰져있다! CWinApp 꼭 하나 생성해야한다.

교재 118쪽

Page 38: MFC 발견 (1)

MFC 어떻게 공부해야 할까?

• MFC는 프레임워크다. 따라서 정해진 규칙(rule)이 있다.

• 그 규칙을 익히고 ‘재빠르게’ 써먹으면 된다.

• 오늘은 그 규칙을 이해하는 첫 번째 시간이어서 어려웠다ㅠㅠ

• 그걸 이해하지 못하면 왜 main이 없을까라는 고민을 계속 하면서 MFC가 싫어지고..어려워지고..윈플이 싫어지고…그러면 D학점 맞고..

Page 39: MFC 발견 (1)

다음 시간에는

• 윈도우 개발 필수지식 (메시지, 이벤트-드리븐)

• MFC 기본 구조 이야기

• 2주차 수업 복습(CString, 자료구조)

• 프로그래밍 세계 이야기 (유니코드, STL…)