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
; 절차, 방법, 처리
MFC 발견 (2)
MFC 발견 (2)
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
선언하고
정의하고
핸들러 만든다
이런 거 언제 일일이 하고 있어!
MFC 발견 (2)
그 동안
삽질하고
있었어
(어려우니까) 중간정리
• 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
코드 페이지
• 같은 값이라도 코드페이지가 다르면 다른 문자로 보인다.
MFC 발견 (2)
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

PPTX
MFC 핵심개념
PPTX
MFC 발견 (1)
PDF
웹표준과 자동화의 약속된 승리
PDF
클래스의 기초 지식
PDF
M5 6 1
PDF
More effective c++ chapter4 이후 항목 29까지
PDF
More effective c++ 항목30부터
PDF
EMOCON 2015 - Jspm & systemjs
MFC 핵심개념
MFC 발견 (1)
웹표준과 자동화의 약속된 승리
클래스의 기초 지식
M5 6 1
More effective c++ chapter4 이후 항목 29까지
More effective c++ 항목30부터
EMOCON 2015 - Jspm & systemjs

Viewers also liked (20)

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

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 ; 절차, 방법, 처리
  • 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. 이런 거 언제 일일이 하고 있어!
  • 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. 코드 페이지 • 같은 값이라도 코드페이지가 다르면 다른 문자로 보인다.
  • 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장. 화면출력