티스토리 뷰
MFC란 Microsoft Foundation Class의 약자로 C++ 언어가 제공하는 거의 모든 문법적인 요소들을 잘 적용하여 윈도우 API를 클래스화한 방대한 라이브러리이다. C++언어를 사용하는 경우 API 함수들이 모두 C형태로 제공되기에, C++형식에 맞도록 재구성해야 하는데, 너무 많아 개인적인 작업은 거의 불가능하다. 따라서 MS에서 C++개발자를 위해 API 함수와 API 함수가 사용하는 구조체들을 모아 클래스를 만들어 놓았다.
Win32 API의 경우 WinMain으로 시작한다. C언어에서의 main 함수라고 생각하면 된다. WinMain은 다음과 같은 구조로 되어있다.
1. 윈도우 클래스 등록
2. 메인 윈도우 생성
3. 메시지 처리
먼저 윈도우 클래스에서 클래스는 C++에서의 클래스를 의미하는 것이 아닌 클래스라는 용어를 사용한 것이다. 윈도우 클래스는 비유하면 가문, 혈통과 같은 것이다. 사람이 태어나면 동사무소에 가서 출생 신고를 해야 주민등록번호를 받은 후에 국가에서 주는 서비스를 받을 수 있다.
마찬가지로 윈도우 클래스도 등록을 해야 윈도우에서 제공하는 서비스를 받을 수 있다.
메시지 처리에서는 윈도우 프로그램은 메시지로 명령을 주고 받는다. 클릭을 한 번을 하더라도 메시지가 오고 가는 것이다.
핸들
핸들이란 특정화된 대상에 번호를 붙여서 부르는 것이다. 이것은 운영체제가 나한테 주는 값으로 실제 함수나 명령이 어떤 주소를 갖고 있는지 사용자는 알지 못한 채 넘어 온 핸들 값을 가지고 판단한다.
메시지 핸들러 집합
윈도우 응용프로그램은 메시지 구동 구조로 동작한다. 메시지 구동 구조에서는 받는 메시지에 따라 실행 순서가 달라지며, 해당 메시지에 어떻게 반응하는가에 따라 동작이 달라진다. 메시지를 받았을 때, 동작을 결정하는 코드를 편의상 메시지 핸들러(Message Handler)라 부른다.
프로그래머는 키보드 메시지 핸들러, 마우스 메시지 핸들러, 메뉴 메시지 핸들러와 같은 다양한 메시지 핸들러를 작성하게 된다.
그리고 이런 메시지 핸들러의 집합을 윈도우 프로시져(Window Procedure)이라 부르고 윈도우 운영체제는 프로그램이 처리하지 않는 메시지를 자동으로 처리하지 않는 메시지를 자동으로 처리할 수 있도록 운영체제 차원의 메시지 핸들러를 제공한다.
MFC를 이용하여 윈도우 프로그램을 만들면 아래와 같이 나온다.
Win, Wnd
Win과 Wnd가 자주 등장한다. Win은 윈도우즈 어플리케이션 또는 운영체제를 의미하고, Wnd는 윈도우 창을 의미한다.
MFC도 Win32와 마찬가지로 윈도우 클래스 등록 -> 메인 윈도우 생성 -> 메시지 처리의 과정을 거친다. Win32 API에서 WinMain을 사용했다면 MFC에서는 CWinAPP를 사용한다.
1. 윈도우 클래스 등록 : InitApplication
2. 메인 윈도우 생성 함수 : InitInstance
3. 메시지 처리 함수 : Run
4. 메인 윈도우 파괴 함수 : ExitInstance
5. 윈도우 클래스 해제 함수 : ExitApplication
위에 언급한 것처럼 윈도우 클래스를 등록 후, 메인 윈도우를 생성한다. 메시지를 처리하여 명령을 주고 받고 마지막에는 등록, 생성과는
반대로 메인 윈도우를 먼저 파괴한 후 윈도우 클래스를 해제한다.
만약 더블 클릭을 사용하지 않고 싶으면 CWinApp를 상속 받아서 InitApplication을 오버라이딩 하면 된다.
MFC를 이용하여 윈도우 프로그램을 만드는 시작 방법을 설명하겠다. 지금 부터 나오는 내용은 CWinAPP + CDialog를 사용한 것이다.
파일 - 새로 만들기 - 프로젝트를 클릭하면 위와 같은 창이 뜬다. Visual C++ 하위에 있는 MFC를 선택한다.
그리고 MFC 응용 프로그램을 선택 임른 자신이 원하는 이름과 경로를 설정하고, 확인 버튼을 눌러준다.
여기서는 다음을 누르고 지나간다.
이 창에서는 대화 상자 기반을 체크한다. 위에서 언급했듯이 CDialog를 사용할 것이기 때문에 선택한 것이다.
밑에 있는 SDL을 해제 해주고 다음 버튼 누른다.
여기서는 정보 상자만 체크 해제하고 다음을 클릭한다.
모든 체크를 해제한 후 다음을 클릭한다.
이 화면에서는 CExamApp와 CExamDlg 이 두개의 클래스만 생성되야 한다. 마침을 눌러 준다.
마침을 누르고 나면 위와 같은 화면이 나타난다.
이제 부터 마우스 왼쪽 버튼을 클릭하면 메시지 창이 뜨는 것을 만들어보겠다.
프로젝트 탭에서 클래스 마법사를 클릭한다.
여기서 클래스 이름은 CExamDlg로 선택해 준다. 그리고 명령, 메시지, 가상 함수, 멤버 변수, 메서드 탭 중 메시지 탭을 선택한 후,
검색 처리기 창에서 WM_LBUTTONDOWN을 선택하고 오른쪽의 처리기 추가를 누르고 확인을 눌러준다.
ExamDlg.cpp 소스파일에 위의 소스가 추가된다. 여기서 첫 번째 인자는 마우스를 눌렀을 때 조합키가 있는지 확인하는 인자이다.
뒤의 변수는 마우스가 클릭한 좌표가 들어오는 변수이다.
Exam.cpp에서 소스 코드가 생성되어 있는데, 위의 코드만 남겨두고 나머지 코드는 삭제를 해준다.
삭제한 부분은 컴파일 시 필요가 없는 부분이고 프로그램을 복잡하게 만들기에 삭제한것 이다.
이제 우리가 왼쪽 버튼을 누르면 메시지 박스가 나타나는 소스 코드를 넣어보도록 하겠다.
AfxMessageBox() 함수가 메시지 창에서 내용을 출력하게 해주는 것이다. 큰 따옴표 앞에 L을 써주고, 내용을 입력하면 된다.
이제 Ctrl + F5를 눌러 실행을 하면 아래와 같은 창이 생성된다.
마우스 왼쪽 버튼을 클릭하면 위에서 설정한 내용이 나오게 된다.
여기까지 MFC를 이용하여 프로그램을 생성하는 방법과 마우스를 클릭하면 메시지 창이 뜨는 것을 실습해봤다.
'TIPS' 카테고리의 다른 글
[TIPS 프로그래밍 강좌] 12차시 정리 (0) | 2017.02.16 |
---|---|
[TIPS 프로그래밍 강좌] 11차시 정리 (0) | 2017.02.13 |
[TIPS 프로그래밍 강좌] 9차시 정리 (0) | 2017.02.06 |
[TIPS 프로그래밍 강좌] 8차시 정리 (0) | 2017.01.31 |
[TIPS 프로그래밍 강좌] 7차시 정리 (0) | 2017.01.21 |
- Total
- Today
- Yesterday
- 오일러
- 오일러 프로젝트 11번
- 헤더
- 이미지게임
- 팁스강좌
- tipsr강좌
- arp
- 2의 1000승
- 허프만 알고리즘
- 화투이미지맞추기
- Tips
- 비손실 압축
- 오일러 프로젝트 14번
- 키보드 메시지 이벤트
- Omok
- 오일러 프로젝트 8번
- 와이어샤크
- tipssoft
- 서버
- TIPS강좌
- MFC
- tipsoft
- 오일러 프로젝트 13
- 패킷
- CBrush
- 오일러 프로젝트 12번
- 오일러 프로젝트 16번
- 실행 압축
- 오일러 프로젝트 10본
- 약수 500개
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |