SlideShare a Scribd company logo
1 of 43
MFC 발견
두번째 주제
• 윈도우 프로그래밍 필수사항(메시지, 이벤트)
• MFC 큰 뼈대
• CString(with 유니코드), 자료구조 이야기
↑ 시바견
지난 주 복습
• MFC는 SDK를 객체로 감싼 것에 불과하다.(캡슐화)
• main 조차도 숨겨져 있다.(캡슐화)
CWinApp::InitInstance(MFC에서의 Main역할)
진입점, WinMain, Create
저번 주는 MFC를 어렵게 느끼게했던
캡슐화에 대해 알아보았다.
윈도우 플밍 필수지식: 이벤트-드리븐
• 이벤트가 뭘까요? 사건!
클릭했을 때
마우스 움직이는 거
키보드 누르는 거
창이 생성되는 거
창이 닫히는 거
스크롤바가 움직이는 거
입력 창 내용이 변하는 거
...
엄청많다!
교재 29쪽
교재 32쪽
윈도우 플밍 필수지식: 메시지
• 메시지가 뭘까요? 이벤트가 발생했다는 사실을 알려주는 놈!
전송버튼 클릭
마우스
움직임
키보드
눌림
이벤트 발생! 메시지 큐에 추가됨
AfxMessageBox(_T(“클릭하셨네요!”))
메시지 처리부(핸들러)
교재 29쪽
교재 32쪽
1. 마우스를 클릭했다. (이벤트 발생)
2. 운영체제가 이 사실을 프로그램에게 알려준다. (메시지)
3. 프로그램이 메시지 창을 띄운다. (핸들러 실행)
예를 들어봅시다.
이벤트가 발생하고 프로그램에게 메시지가 전달되고,
프로그램은 메시지를 꺼내와 처리하는 방식
이벤트-드리븐(event-driven) 방식
이벤트-드리븐은 여기저기 쓰입니다.
• 얻어 맞을 때
• MFC 외에도 자바 GUI, 자바스크립트, Qt, 안드로이드 등등
웹 개발
Qt 라이브러리
안드로이드
HelloSDK 심층분석: 이벤트 핸들러
https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms633577(v=vs.85).aspx
길어지는 함수
Procedure
; 절차, 방법, 처리
HelloSDK 심층분석: 이벤트 핸들러
https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms633577(v=vs.85).aspx
길어지는 함수Procedure
; 절차, 방법, 처리
HelloMFC 심층분석: 이벤트 핸들러
메시지 맵은 이벤트와 핸들러(처리자)를
이어주는(맵핑) 해주는 역할을 한다.
기본적인 것들은 이미 맵핑되어 있다.
함수가 단순해지고
깔끔한 코드
메시지맵이 뭔가요?
기존 switch 를 이용하던 것을 객체지향적으로 예쁘게 한 녀석
메시지맵을 써봅시다.
1
2
3
선언하고
정의하고
핸들러 만든다
MFC_3.cpp
https://msdn.microsoft.com/ko-kr/library/sf1ba0hh.aspx
이런 거 다 알아야 하나요? No!
당연히 추상화/캡슐화 되어있죠!
기본적인 것들은 이미 맵핑되어있다.
메시지들은 이미 매핑되어있다.
• 그래서 메시지맵!
WM_CLICK WM_PAINT
::OnPaint();::OnClick();
메시지
맵(map): 지도
실습을 해 봅시다.
MFC_3.cpp MFC_4.cpp
1
2
3
선언하고
정의하고
핸들러 만든다
이런 거 언제 일일이 하고 있어!
그 동안
삽질하고
있었어
(어려우니까) 중간정리
• GUI는 이벤트 기반의 개발이다. (이벤트-드리븐)
• 이벤트가 발생되면, 창에게 메시지가 보내진다.
• 그 메시지를 처리하면 된다. (메시지 핸들러)
• MFC에서는 메시지에 따라 자동으로 함수를 실행해준다. (메시지맵)
MFC의 큰 뼈대
• CWinApp: 응용프로그램
• CFrameWnd: 창 틀(프레임)
• CChildView: 창의 내용(뷰)
교재 51,52쪽
교재 131,132쪽
https://msdn.microsoft.com/ko-kr/library/5c2fsa5a.aspx
창을 만들어 봅시다.
MFC_2.cpp
CString을 들어가기 전에
• 문자와 문자’열’
char chA = ‘A’;
char chKor = ‘가’; (X)
char *str1 = “MF씨발1”;
char str2[ ] = “MF씨발2”;
char는 영어권(ASCII)을 기준으로 만들어졌음.
char는 1바이트이기 때문에,
전세계 모든 문자들을 표현할 수 없는 한계점이 있다.
A
가/2 가/2 두 개가 모여서 비로소 ‘가‘
MBCS
M F 씨/2 씨/2 발/2 발/2 1
교재 81쪽
교재 111쪽
MBCS (Multi-Byte Character Set)
char 문자형의 진실!
char는 8bit(1Byte)를 모두 쓰지 않는다!
7 6 5 4 3 2 1 0
예약된 비트!
최상위 비트(MSB)가 set 되면 다음 문자까지 확장.
즉, 멀티바이트! CharBit.cpp
코드 페이지
• 같은 값이라도 코드페이지가 다르면 다른 문자로 보인다.
MBCS (Multi-Byte Character Set)
• MBCS 만으로는 한계가 있다.
그래서 나온 놈이 유니코드!
유니코드를 사용하는 함수들은 w가 붙는다.
strlen, wcslen
printf, wprintf
string, wstring
유니코드와 MBCS는 호환이 안 된다.
유니코드용, MBCS용 따로 개발해야하나?
개노가다
MFC는 이러한 문제점을 해결해준다.
• CString
• _T()
• TCHAR
• LPTSTR
위 녀석들을 쓰면 컴파일러가 알아서 처리해준다!
그래서 _T(“”)를 쓰는 이유!
형식 ANSI UNICODE
TCHAR char wchar_t
LPTSTR char* / LPSTR wchar_t* / LPWSTR
LPCTSTR const char* / LPCSTR const wchar_t* / LPCWSTR
MS는 참 똑똑하구만
CString 예제들
CString str;
str = _T(“안녕”);
str += _T(“하세요”); // “안녕하세요”
str.Format(_T(“%d, %s, %.2f”), 50, “MFC발견”, 50.7); // 50, MFC발견, 50.70
str.LoadString(IDS_STRING);
MFC_5.cpp
중간정리2
• 컴퓨터는 처음에 영어(ASCII)전용으로 탄생하였다. (char)
• 그러다가 문자 표현에 문제가 생겨 MBCS 를 쓴다.
• 그래도 문제점이 있어서 유니코드를 사용한다.
• 이것들을 해결해주는 기특한 녀석이 CString과 _T()
str.LoadString (IDS_STRING);
문자열 리소스를 읽습니다
뭔 개소리야
리소스
• Resource: 자원, 자료
코드의 논리와 무관한 데이터들
(메뉴, 비트맵, 엑셀레이터, 문자열, 아이콘, 커서 등…)
왜 리소스를 만드냐?
- 디자이너와 개발자 작업분담이 쉽다.(HTML, CSS 관계)
- 리소스만 컴파일 하면 된다.
- 재사용이 쉽다.
- 국제화(i18n) 하기 편하다
교재 213쪽
리소스의 개념은 여러 곳에서 쓰입니다.
리소스를 쉽게 비유하면 “옷 갈아 입는 것”에 비유할 수 있어요.
- HTML+CSS
- 안드로이드 개발에서도!
- 한글판/영어판/일본어 번역 파일 등등
안드로이드 스튜디오
비주얼 스튜디오
아니 그러니까 리소스 왜 쓰냐고?
리소스의 위력에 대해 살펴보겠습니다.
리소스해커 시연
그렇다면
오늘 내용 정리
• 이벤트-드리븐, 메시지
• 메시지맵, 이벤트 핸들러 (WM_PAINT …)
• MFC 뼈대 (CWinApp, CFrameWnd, CChildView)
• 유니코드, MBCS, 코드페이지
• CString
• 리소스
오늘 핵심 내용
• 메시지맵
• CString
• _T
이 3개를 제대로 이해하려고
떠들어댔습니다..ㅠㅠ
다음 시간에는?
지금까지 윈도우플밍 기초를 다졌습니다.
- 캡슐화(MFC vs SDK)
- WinMain,
CWinApp::InitInstance
- 이벤트-드리븐
- 메시지맵
- CWinApp
CFramdWnd
CChildView
- CString
- 유니코드
다음시간
4장. 화면출력

More Related Content

Viewers also liked

MFC 개발설정
MFC 개발설정MFC 개발설정
MFC 개발설정종훈 박
 
MFC 유틸리티 클래스
MFC 유틸리티 클래스MFC 유틸리티 클래스
MFC 유틸리티 클래스종훈 박
 
PHP와 함께 한 개발 성장기
PHP와 함께 한 개발 성장기PHP와 함께 한 개발 성장기
PHP와 함께 한 개발 성장기종훈 박
 
Phase 1 Documentation (Added System Req)
Phase 1 Documentation (Added System Req)Phase 1 Documentation (Added System Req)
Phase 1 Documentation (Added System Req)Reinier Eiman
 
Baritone TC Techniques 2016
Baritone TC Techniques 2016Baritone TC Techniques 2016
Baritone TC Techniques 2016Randall Bennett
 
Baritone BC Techniques 2016
Baritone BC Techniques 2016Baritone BC Techniques 2016
Baritone BC Techniques 2016Randall Bennett
 
Researching genre
Researching genreResearching genre
Researching genreelliearm16
 
Font Research/Planning
Font Research/PlanningFont Research/Planning
Font Research/Planningelliearm16
 
Mellophone Techniques 2016
Mellophone Techniques 2016Mellophone Techniques 2016
Mellophone Techniques 2016Randall Bennett
 
mfc introducere
mfc introduceremfc introducere
mfc introduceremcroitor
 
테스트 코드 삽질기 + 리팩토링
테스트 코드 삽질기 + 리팩토링테스트 코드 삽질기 + 리팩토링
테스트 코드 삽질기 + 리팩토링종훈 박
 
스마트폰 혁명(김태우)
스마트폰 혁명(김태우)스마트폰 혁명(김태우)
스마트폰 혁명(김태우)gilforum
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문종훈 박
 
KAP 업종별기술세미나 12년 04월 #02
KAP 업종별기술세미나 12년 04월 #02KAP 업종별기술세미나 12년 04월 #02
KAP 업종별기술세미나 12년 04월 #02chasarang
 

Viewers also liked (20)

MFC 개발설정
MFC 개발설정MFC 개발설정
MFC 개발설정
 
MFC 유틸리티 클래스
MFC 유틸리티 클래스MFC 유틸리티 클래스
MFC 유틸리티 클래스
 
PHP와 함께 한 개발 성장기
PHP와 함께 한 개발 성장기PHP와 함께 한 개발 성장기
PHP와 함께 한 개발 성장기
 
2 Professional MFC
2 Professional MFC2 Professional MFC
2 Professional MFC
 
Shani waninger
Shani waningerShani waninger
Shani waninger
 
Phase 1 Documentation (Added System Req)
Phase 1 Documentation (Added System Req)Phase 1 Documentation (Added System Req)
Phase 1 Documentation (Added System Req)
 
Baritone TC Techniques 2016
Baritone TC Techniques 2016Baritone TC Techniques 2016
Baritone TC Techniques 2016
 
Baritone BC Techniques 2016
Baritone BC Techniques 2016Baritone BC Techniques 2016
Baritone BC Techniques 2016
 
Researching genre
Researching genreResearching genre
Researching genre
 
Updated Victor C V 1
Updated Victor C V 1Updated Victor C V 1
Updated Victor C V 1
 
Font Research/Planning
Font Research/PlanningFont Research/Planning
Font Research/Planning
 
Mise en scene
Mise en sceneMise en scene
Mise en scene
 
Presentation 2
Presentation 2Presentation 2
Presentation 2
 
Mellophone Techniques 2016
Mellophone Techniques 2016Mellophone Techniques 2016
Mellophone Techniques 2016
 
Tuba Techniques 2016
Tuba Techniques 2016Tuba Techniques 2016
Tuba Techniques 2016
 
mfc introducere
mfc introduceremfc introducere
mfc introducere
 
테스트 코드 삽질기 + 리팩토링
테스트 코드 삽질기 + 리팩토링테스트 코드 삽질기 + 리팩토링
테스트 코드 삽질기 + 리팩토링
 
스마트폰 혁명(김태우)
스마트폰 혁명(김태우)스마트폰 혁명(김태우)
스마트폰 혁명(김태우)
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
 
KAP 업종별기술세미나 12년 04월 #02
KAP 업종별기술세미나 12년 04월 #02KAP 업종별기술세미나 12년 04월 #02
KAP 업종별기술세미나 12년 04월 #02
 

MFC 발견 (2)

  • 1. MFC 발견 두번째 주제 • 윈도우 프로그래밍 필수사항(메시지, 이벤트) • MFC 큰 뼈대 • CString(with 유니코드), 자료구조 이야기 ↑ 시바견
  • 2. 지난 주 복습 • MFC는 SDK를 객체로 감싼 것에 불과하다.(캡슐화) • main 조차도 숨겨져 있다.(캡슐화) CWinApp::InitInstance(MFC에서의 Main역할) 진입점, WinMain, Create 저번 주는 MFC를 어렵게 느끼게했던 캡슐화에 대해 알아보았다.
  • 3. 윈도우 플밍 필수지식: 이벤트-드리븐 • 이벤트가 뭘까요? 사건! 클릭했을 때 마우스 움직이는 거 키보드 누르는 거 창이 생성되는 거 창이 닫히는 거 스크롤바가 움직이는 거 입력 창 내용이 변하는 거 ... 엄청많다! 교재 29쪽 교재 32쪽
  • 4. 윈도우 플밍 필수지식: 메시지 • 메시지가 뭘까요? 이벤트가 발생했다는 사실을 알려주는 놈! 전송버튼 클릭 마우스 움직임 키보드 눌림 이벤트 발생! 메시지 큐에 추가됨 AfxMessageBox(_T(“클릭하셨네요!”)) 메시지 처리부(핸들러) 교재 29쪽 교재 32쪽
  • 5. 1. 마우스를 클릭했다. (이벤트 발생) 2. 운영체제가 이 사실을 프로그램에게 알려준다. (메시지) 3. 프로그램이 메시지 창을 띄운다. (핸들러 실행) 예를 들어봅시다.
  • 6. 이벤트가 발생하고 프로그램에게 메시지가 전달되고, 프로그램은 메시지를 꺼내와 처리하는 방식 이벤트-드리븐(event-driven) 방식
  • 7. 이벤트-드리븐은 여기저기 쓰입니다. • 얻어 맞을 때 • MFC 외에도 자바 GUI, 자바스크립트, Qt, 안드로이드 등등 웹 개발 Qt 라이브러리 안드로이드
  • 8. HelloSDK 심층분석: 이벤트 핸들러 https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms633577(v=vs.85).aspx 길어지는 함수 Procedure ; 절차, 방법, 처리
  • 9. HelloSDK 심층분석: 이벤트 핸들러 https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms633577(v=vs.85).aspx 길어지는 함수Procedure ; 절차, 방법, 처리
  • 10.
  • 11.
  • 12. HelloMFC 심층분석: 이벤트 핸들러 메시지 맵은 이벤트와 핸들러(처리자)를 이어주는(맵핑) 해주는 역할을 한다. 기본적인 것들은 이미 맵핑되어 있다. 함수가 단순해지고 깔끔한 코드
  • 13. 메시지맵이 뭔가요? 기존 switch 를 이용하던 것을 객체지향적으로 예쁘게 한 녀석
  • 15. https://msdn.microsoft.com/ko-kr/library/sf1ba0hh.aspx 이런 거 다 알아야 하나요? No! 당연히 추상화/캡슐화 되어있죠! 기본적인 것들은 이미 맵핑되어있다.
  • 16. 메시지들은 이미 매핑되어있다. • 그래서 메시지맵! WM_CLICK WM_PAINT ::OnPaint();::OnClick(); 메시지 맵(map): 지도
  • 17. 실습을 해 봅시다. MFC_3.cpp MFC_4.cpp 1 2 3 선언하고 정의하고 핸들러 만든다
  • 18. 이런 거 언제 일일이 하고 있어!
  • 19.
  • 21. (어려우니까) 중간정리 • GUI는 이벤트 기반의 개발이다. (이벤트-드리븐) • 이벤트가 발생되면, 창에게 메시지가 보내진다. • 그 메시지를 처리하면 된다. (메시지 핸들러) • MFC에서는 메시지에 따라 자동으로 함수를 실행해준다. (메시지맵)
  • 22. MFC의 큰 뼈대 • CWinApp: 응용프로그램 • CFrameWnd: 창 틀(프레임) • CChildView: 창의 내용(뷰) 교재 51,52쪽 교재 131,132쪽 https://msdn.microsoft.com/ko-kr/library/5c2fsa5a.aspx
  • 24. CString을 들어가기 전에 • 문자와 문자’열’ char chA = ‘A’; char chKor = ‘가’; (X) char *str1 = “MF씨발1”; char str2[ ] = “MF씨발2”; char는 영어권(ASCII)을 기준으로 만들어졌음. char는 1바이트이기 때문에, 전세계 모든 문자들을 표현할 수 없는 한계점이 있다. A 가/2 가/2 두 개가 모여서 비로소 ‘가‘ MBCS M F 씨/2 씨/2 발/2 발/2 1 교재 81쪽 교재 111쪽
  • 25. MBCS (Multi-Byte Character Set) char 문자형의 진실! char는 8bit(1Byte)를 모두 쓰지 않는다! 7 6 5 4 3 2 1 0 예약된 비트! 최상위 비트(MSB)가 set 되면 다음 문자까지 확장. 즉, 멀티바이트! CharBit.cpp
  • 26. 코드 페이지 • 같은 값이라도 코드페이지가 다르면 다른 문자로 보인다.
  • 27.
  • 28. MBCS (Multi-Byte Character Set) • MBCS 만으로는 한계가 있다. 그래서 나온 놈이 유니코드! 유니코드를 사용하는 함수들은 w가 붙는다. strlen, wcslen printf, wprintf string, wstring
  • 29. 유니코드와 MBCS는 호환이 안 된다. 유니코드용, MBCS용 따로 개발해야하나? 개노가다
  • 30. MFC는 이러한 문제점을 해결해준다. • CString • _T() • TCHAR • LPTSTR 위 녀석들을 쓰면 컴파일러가 알아서 처리해준다! 그래서 _T(“”)를 쓰는 이유! 형식 ANSI UNICODE TCHAR char wchar_t LPTSTR char* / LPSTR wchar_t* / LPWSTR LPCTSTR const char* / LPCSTR const wchar_t* / LPCWSTR
  • 32. CString 예제들 CString str; str = _T(“안녕”); str += _T(“하세요”); // “안녕하세요” str.Format(_T(“%d, %s, %.2f”), 50, “MFC발견”, 50.7); // 50, MFC발견, 50.70 str.LoadString(IDS_STRING); MFC_5.cpp
  • 33. 중간정리2 • 컴퓨터는 처음에 영어(ASCII)전용으로 탄생하였다. (char) • 그러다가 문자 표현에 문제가 생겨 MBCS 를 쓴다. • 그래도 문제점이 있어서 유니코드를 사용한다. • 이것들을 해결해주는 기특한 녀석이 CString과 _T()
  • 36. 리소스 • Resource: 자원, 자료 코드의 논리와 무관한 데이터들 (메뉴, 비트맵, 엑셀레이터, 문자열, 아이콘, 커서 등…) 왜 리소스를 만드냐? - 디자이너와 개발자 작업분담이 쉽다.(HTML, CSS 관계) - 리소스만 컴파일 하면 된다. - 재사용이 쉽다. - 국제화(i18n) 하기 편하다 교재 213쪽
  • 37. 리소스의 개념은 여러 곳에서 쓰입니다. 리소스를 쉽게 비유하면 “옷 갈아 입는 것”에 비유할 수 있어요. - HTML+CSS - 안드로이드 개발에서도! - 한글판/영어판/일본어 번역 파일 등등
  • 40. 리소스의 위력에 대해 살펴보겠습니다. 리소스해커 시연 그렇다면
  • 41. 오늘 내용 정리 • 이벤트-드리븐, 메시지 • 메시지맵, 이벤트 핸들러 (WM_PAINT …) • MFC 뼈대 (CWinApp, CFrameWnd, CChildView) • 유니코드, MBCS, 코드페이지 • CString • 리소스
  • 42. 오늘 핵심 내용 • 메시지맵 • CString • _T 이 3개를 제대로 이해하려고 떠들어댔습니다..ㅠㅠ
  • 43. 다음 시간에는? 지금까지 윈도우플밍 기초를 다졌습니다. - 캡슐화(MFC vs SDK) - WinMain, CWinApp::InitInstance - 이벤트-드리븐 - 메시지맵 - CWinApp CFramdWnd CChildView - CString - 유니코드 다음시간 4장. 화면출력