mfc 발견 (1)
TRANSCRIPT
![Page 1: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/1.jpg)
MFC 발견
첫번째 주제
• GUI 프로그래밍과 MFC 소개
• MFC를 통해 우리가 배울 수 있는 거
• 첫번째 예제
↑ 시바견
![Page 2: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/2.jpg)
우리가 그 동안 해왔던 것
누구한테 보여주기도 민망하다…
![Page 3: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/3.jpg)
만들고 싶은 거
도스 창 말고 제대로 된 창을
보여주고 싶다!
![Page 4: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/4.jpg)
꼭 MFC로 해야 하나?
No! MFC말고도 방법은 많다!
그치만 MFC는 비주얼 스튜디오에서
지원하니까 무진장 편하다.
순식간에 창이며 버튼들을
만들 수 있다.
또한, MFC는 아직도 많이 쓴다.
MS에서는 버렸지만..
![Page 5: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/5.jpg)
MFC 말고 어떤 게 있을까?
• Windows API를 이용한다. (강의시간에 말한 SDK!!!)
• 자바 GUI 개발을 한다. (AWT, Swing..)
• Qt나 GTK 등의 라이브러리를 이용한다(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)
• [닷넷] WinForms나 WPF를 이용한다
교재 34쪽 SDK
교재 35쪽 .NET
![Page 6: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/6.jpg)
MFC 말고 어떤 게 있을까?
• Windows API를 이용한다. (강의시간에 말한 SDK!!!)
• 자바 GUI 개발을 한다. (AWT, Swing..)
• Qt나 GTK 등의 라이브러리를 이용한다
(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)
• [닷넷] WinForms나 WPF를 이용한다
손이 너무 많이 가고, 생산성이 떨어진다.
![Page 7: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/7.jpg)
MFC 말고 어떤 게 있을까?
• Windows API를 이용한다. (강의시간에 말한 SDK!!!)
• 자바 GUI 개발을 한다. (AWT, Swing..)
• Qt나 GTK 등의 라이브러리를 이용한다
(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)
• [닷넷] WinForms나 WPF를 이용한다
다양한 OS지원/안드로이드 개발
MFC배우면 조금만 공부하면 OK
![Page 8: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/8.jpg)
MFC 말고 어떤 게 있을까?
• Windows API를 이용한다. (강의시간에 말한 SDK!!!)
• 자바 GUI 개발을 한다. (AWT, Swing..)
• Qt나 GTK 등의 라이브러리를 이용한다
(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)
• [닷넷] WinForms나 WPF를 이용한다
다양한 OS지원/다양한 언어 지원
MFC배우면 조금만 공부하면 OK
리눅스에서는 많이 쓴다.
![Page 9: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/9.jpg)
MFC 말고 어떤 게 있을까?
• Windows API를 이용한다. (강의시간에 말한 SDK!!!)
• 자바 GUI 개발을 한다. (AWT, Swing..)
• Qt나 GTK 등의 라이브러리를 이용한다
(이것들은 C/C++, 파이썬, PHP 등등.. 다양한 OS/언어를 지원)
• [닷넷] WinForms나 WPF를 이용한다
MS에서 야심차게 준비한 것!
최근엔 리눅스도 지원한다더라
앞으로 알아두면 좋음.
MFC배우다가 가면 신세계!
![Page 10: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/10.jpg)
MFC 말고 어떤 게 있을까?
• 델파이
• 비주얼 베이직
…그냥 넘어가자
교재 34쪽RAD, 클래스 라이브러리
![Page 11: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/11.jpg)
MFC가 왜 나왔나?
vs
HelloSDK.cpp HelloMFC.cpp
교재 35쪽 (여기서 잠깐)
교재 55쪽 (여기서 잠깐)
![Page 12: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/12.jpg)
MFC가 왜 나왔나?
vs
HelloSDK.cpp HelloMFC.cpp
짱 편하다!
교재 35쪽 (여기서 잠깐)
교재 55쪽 (여기서 잠깐)
![Page 13: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/13.jpg)
이것이 어떻게 가능한가?
C++ 시간을 회상하며…
<Class, 객체지향>
상속
추상화
캡슐화
은닉화
다형성
그때는 그저 그냥 외웠던 것들..
이제 써먹는다!
CFrameWnd는 어디에 있고
Create() 는 도대체 뭐 하는 놈이야?
![Page 14: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/14.jpg)
교재 p48-55를 꼭! 읽어보자!
특히 54, 55쪽
![Page 15: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/15.jpg)
atlmfc\src\mfc\wincore.cpp
HelloSDK.cppHelloMFC.cpp
![Page 16: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/16.jpg)
atlmfc\src\mfc\wincore.cpp
HelloSDK.cppHelloMFC.cpp
![Page 17: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/17.jpg)
atlmfc\src\mfc\wincore.cpp
HelloSDK.cppHelloMFC.cpp
![Page 18: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/18.jpg)
atlmfc\src\mfc\wincore.cpp
HelloSDK.cppHelloMFC.cpp
![Page 19: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/19.jpg)
atlmfc\src\mfc\wincore.cpp
HelloSDK.cppHelloMFC.cpp
즉, MFC는 SDK를
쓰기 편하게 만든 것에 불과.
![Page 20: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/20.jpg)
이것들 다 기억하려고 하지 말고,
아하! 이래서 그렇구나! 하고 넘어 갑시다!
자세히 몰라도 되는 내용이지만
“원리와 구조를 알면 MFC 전반적인 이해와 구조 파악에 큰 도움이 된다!”
주의사항!
![Page 21: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/21.jpg)
이것이 어떻게 가능한가?
C++ 시간을 회상하며…
<Class, 객체지향>
상속
추상화
캡슐화
은닉화
다형성
그때는 그저 그냥 외웠던 것들..
이제 써먹는다!
하나의 MFC라는 캡슐
그 캡슐 안에 들어가있는수 많은 SDK 코드들
교재 51쪽 2,3번
![Page 22: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/22.jpg)
(캡슐화 관점에서 본) 객체지향의 prog&cons
• 사용하기 편하다! 코드가 줄어든다.
• 개발자가 알아야 할 내용들이 줄어든다. (부담이 적다)
• 반대로, 한번에 이해하기 어렵다
• 문제가 발생했을 때 멘붕이 온다.
![Page 23: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/23.jpg)
Main 함수는 어디 갔다 버렸어요?
너무 캡슐화를 하다 보니..
Main이 어디로 가버렸어요…
교재 51쪽 3번마지막 줄
![Page 24: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/24.jpg)
Main 함수도 사실 숨겨져 있습니다.(캡슐화)
tchar.h
atlmfc\src\mfc\appmodul.cpp
atlmfc\src\mfc\winmain.cpp
HelloMFC.cpp
1
2
3
MFC의 메인이라고 생각하면 쉽다.
![Page 25: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/25.jpg)
Main 함수도 사실 숨겨져 있습니다.(캡슐화)
tchar.h
atlmfc\src\mfc\appmodul.cpp
atlmfc\src\mfc\winmain.cpp
HelloMFC.cpp
1
2
3
숨겨져 있기에
어렵고 난해했던 것 일뿐!
![Page 26: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/26.jpg)
진입점(Entry Point)에 대해 알아봅시다.
그게 뭔데? 메인 함수!
https://en.wikipedia.org/wiki/Entry_point
컴퓨터 프로그래밍에서,
Entry point는 프로그램으로 들어가는
제어영역이거나,
실행 시작의 코드 부분이다.
이게 메인 함수지 뭐야!
![Page 27: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/27.jpg)
진입점(Entry Point)에 대해 알아봅시다.
• 진입점은 언어와 컴파일러와의 약속이다. (정확히 말하자면 컴파일러가 아니라 Linker다)
• C언어에서는 main 이라고 약속 했을 뿐!
https://msdn.microsoft.com/ko-kr/library/f9t8842e.aspx
![Page 28: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/28.jpg)
진입점(Entry Point)에 대해 알아봅시다.
https://msdn.microsoft.com/ko-kr/library/f9t8842e.aspx
![Page 29: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/29.jpg)
WinMain은 또 뭔가요?
• 윈도우 프로그램을 개발할 때 사용하는 WinMain함수!
• MS에서는 윈도우 프로그램의 진입점 함수를 WinMain이라고 약속했다.
아하! 그래서 HelloSDK.cpp에서 WinMain 함수를 썼구나!
교재 40쪽 2번
![Page 30: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/30.jpg)
WinMain은 또 뭔가요?
• 아하! 그래서 HelloSDK.cpp에서 WinMain 함수를 썼구나!
HelloSDK.cpp
고민해결!
![Page 31: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/31.jpg)
main vs WinMain
• main: 콘솔창의 잔재가 남아있다.
• WinMain: 진정한 윈도우 개발의 시작. 창으로 시작한다.
HelloMain.cpp
![Page 32: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/32.jpg)
진입점(Entry Point)에 대해 더 알아봅시다.
• 사실 진짜 진입점은 Main 함수가 아닙니다.
• Main 보다도 더 먼저 실행되는 녀석이 있습니다. 이 녀석이 바로 진입점입니다.
이 녀석들은 C 런타임(C RunTime) 메인 (CRT main) 이라고 합니다.
![Page 33: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/33.jpg)
진입점(Entry Point)에 대해 알아봅시다.
진입점의 역할• 필요한 것들을 불러오고 전역변수 등과 같이 필수적인 초기화를 한다.
CRT main Main (혹은 WinMain)
main 일 때: 콘솔창
WinMain 일 때: 콘솔창 X
CRT main 이 결정한다!(CRT main에서 콘솔창 생성)
![Page 34: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/34.jpg)
theApp 원리 알아보기
• 실행결과는?
MFC_0.cpp
![Page 35: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/35.jpg)
이제 만들어 봅시다.
MFC_1.cpp
꼭 CWinApp 객체가
하나 만들어져야 한다!
![Page 36: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/36.jpg)
사실 여기까진 몰라도 돼요. But!
이러한 지식들이 쌓이다 보면 분명 도움이 됩니다. 정말 어려운 상황에서 말이죠!
(1) 번은 보통 CRT 라이브러리가 제대로 설치 않았거나 exe가 정상이 아닐 때 나타나는 오류.
(2) 번에서 입력하지도 않은 invoke_main이 갑자기 튀어나온 이유는 바로 오타가 나는 바람에 WinMaim 이라고
입력했기 때문입니다. WinMain보다 먼저 실행되어 초기화 등을 한 다음에 WinMain을 호출 하는 함수가
WinMain을 찾을 수 없기 때문입니다.
![Page 37: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/37.jpg)
오늘 내용 정리
• MFC말고도 많지만, MFC를 가장 많이 쓴다.
• MFC는 SDK보다 코드가 짧다. (생산성 크다)
사실 MFC안에는 엄청난 SDK코드들이 캡슐화 되어있다.
MS 개발자들 고생 좀 했겠어요..
• 윈도우 플밍에서는 WinMain 함수를 쓴다. (진입점)
• MFC에서는 WinMain 조차 감춰져있다! CWinApp 꼭 하나 생성해야한다.
교재 118쪽
![Page 38: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/38.jpg)
MFC 어떻게 공부해야 할까?
• MFC는 프레임워크다. 따라서 정해진 규칙(rule)이 있다.
• 그 규칙을 익히고 ‘재빠르게’ 써먹으면 된다.
• 오늘은 그 규칙을 이해하는 첫 번째 시간이어서 어려웠다ㅠㅠ
• 그걸 이해하지 못하면 왜 main이 없을까라는 고민을 계속 하면서 MFC가 싫어지고..어려워지고..윈플이 싫어지고…그러면 D학점 맞고..
![Page 39: MFC 발견 (1)](https://reader033.vdocuments.pub/reader033/viewer/2022052418/5a6e790c7f8b9a70728b4f51/html5/thumbnails/39.jpg)
다음 시간에는
• 윈도우 개발 필수지식 (메시지, 이벤트-드리븐)
• MFC 기본 구조 이야기
• 2주차 수업 복습(CString, 자료구조)
• 프로그래밍 세계 이야기 (유니코드, STL…)