MFC

[MFC] MFC 특징 복습

FORHAPPy 2021. 12. 27. 22:40

<개념>

  1. MFC는 클래스 라이브러리 이다.
  2. MFC를 공부해야하는 이유 : 실무를 하다가 모르는 것이 있으면 조언을 구하거나 인터넷에 원하는 자료를 검색해서 문제를 해결 해야한다. 그 자료나 소스가 MFC로 되어 있을 경우 스스로 API에 적용 할 수 있어야 한다. 
  3. MFC는 OOP 기반이므로 캡슐화 추상화 정보은폐 상속 다형성 들의 언어적인 특성을 가진다. 
  4. MFC는 모든것을 객체로 표현하고 객체를 모아 프로그램을 만든다. 객체안에 포함된 멤버함수로 이 객체의 모든 속성을 조절 할 수있다. 
  5. MFC는 프레임워크라는 미리 만들어진 고드의 지원을 받기 때문에 모든것을 직접 코딩하지 않아도 미리 프로그래밍 되어있는 기능들을 공짜로 가져다가 쓸 수 있다. 
  6. 기반 클래스에는 각 요소의 기본 기능이 이미 프로그래밍 되어있으므로 파생클래스도 이 기본기능을 모두 상속받는다. 우리가 사용하는 파생클래스(CWinApp, CFrameWnd, CDoocument, CView)클래스

 


<실전>

 

Tool이라는 MFC 프로젝트를 생성하였다. 

파생클래스(CToolApp, CMainFrame, CToolDoc, CToolView)가 생성된다. 

여기서 CToolApp클래스는 응용프로그램 그 자체이다.

따라서 해당 cpp내에 CToolApp클래스 객체를 전역변수로 만든다. 그러면 프로그램이 생성된다.

유일한 CToolApp 개체이다.

MFC 프로젝트의 WinMain은 프레임 워크 내부에 숨겨져있다.

CToolApp 클래스는 virtual BOOL InitInstance();,  virtual int ExitInstance();를 재정의 하고 있다.

따라서 프레임워크는 CToolApp 이 생성될 때 InitInstance 멤버함수를 호출하여 이 함수에서 필요한 초기화를 할 수 있도록 되어있다. 

 

주요 파생 클래스 기능

 

CMainFrame : 메인 윈도우

CToolDoc : 프로그램이 관리하는 데이터를 저장 (저장할 데이터가 있는 경우 도큐먼트를 프로그래밍한다.)

CToolView : 윈도우 출력을 담당 (화면 출력을 변경하고 싶으면 뷰를 프로그래밍 한다.)

->OnDraw 함수에 출력문을추가 하면 뷰가 WM_PAINT 메시지를 받으면 이 함수가 호출하도록 되어있다.


<실습>

  1. 클래스 뷰 - 추가 - 변수추가 까지 하면 생성자에 초기화 까지 해주는 코드가 넣어진다. 
  2. 아래 처럼 기본 코드에 CToolDoc* pDoc = GetDocument(); 가 작성 되어있고, 유효성을 검사한다.

 

3. 여기서 TextOut으로 글을 넣어줬으나, 출력은 되지 않는다. 다이렉트를 씌워줌으로 써 다이렉트 장치에서 랜더링이 되고 있다.  다이렉트의 Render_End() 후에 추가를 해주면 화면에 출력이 되는 것을 알 수 있다. 

4. 즉, 다이텍 장치를 추가하면 다이렉트 장치에 덮여 씌워진 화면을 보게 되는 것이다.

5. 그렇기 때문에 DC가 필요 없는것이다. DC에 그리는것이 아닌 다이렉트 장치를 이용하여 그리기를 수행할 것이기 때문이다.

 

 


뷰 클래스는 출력 뿐만 아니라 입력도 담당한다.

<WM_CHAR> 메시지를 받았을때 새로 입력된 문자를 str버퍼 뒤에 추가해보자.


<메시지를 처리하는 방법>

메시지를 처리하려면 메시지 핸들러를 작성해야한다. 

클래스 뷰에서 툴뷰 클릭하면 아래 속성창이 보인다. 속성창에서 메시지를 누르면 입력 받을 수있는 메시지들이 쭉 나열 되어있다. 

여기에 핸들러 함수명을 입력하면 메시지와 이 메시지를 처리할 핸들러 함수가 연결된다.

 

도큐먼트의 str변수에 새로 입력된 문자를 추가했다. CString은 문자열을 다루는 다양한 연산자들을 제공한다.

준자를 변경한 후 뷰를 무효화하여 다시 그린다. 

 

중요한건!

문자열은 도큐먼트에 저장하고 입출력은 뷰가 담당하도록 MFC의 도큐먼트/뷰 구조대로 작성한 것이다. 

이 구조대로 프로젝트를 작성하면 저장, 인쇄 등의 작업에도 프레임워크의 도움을 받아 굉장히 쉽게 만들 수 있다.