반도체/MFC

7. MFC에 대하여

Clair_de_Lune 2024. 8. 20. 15:02
728x90

1. 아키텍처

  • 문서/뷰 아키텍처: MFC는 문서(Document)와 뷰(View)를 분리하여 애플리케이션의 데이터와 UI를 관리합니다. CDocument 클래스는 데이터와 비즈니스 로직을, CView 클래스는 사용자 인터페이스를 담당합니다.
  • 윈도우 클래스: MFC에서 CWinApp 클래스를 상속하여 애플리케이션을 정의하고, CFrameWnd 클래스를 상속하여 프레임 윈도우를 생성합니다.

2. 메시지 맵

  • 메시지 처리: MFC는 Windows 메시지를 처리하기 위해 메시지 맵을 사용합니다. ON_COMMAND, ON_WM_PAINT 등의 매크로를 사용하여 메시지를 처리하는 핸들러 함수를 정의합니다.
  • 시스템 메시지: 예를 들어, WM_PAINT, WM_CLOSE, WM_SIZE 등의 메시지를 처리하여 애플리케이션의 동작을 정의합니다.

3. 다이얼로그

  • 모달 및 모델리스 다이얼로그: MFC는 모달 다이얼로그(CDialog::DoModal())와 모델리스 다이얼로그를 지원합니다. 모달 다이얼로그는 사용자 입력을 기다리는 동안 다른 작업을 수행할 수 없습니다.

4. GDI(Graphics Device Interface)

  • MFC는 GDI를 통해 그래픽을 그리는 기능을 제공합니다. CClientDC, CBrush, CPen 등을 사용하여 화면에 도형, 텍스트 등을 그릴 수 있습니다.
  • 그리기 함수: TextOut(), Ellipse(), Rectangle() 등의 함수로 화면을 그립니다.

5. 파일 처리 및 직렬화

  • CFile: 파일 입출력을 위한 클래스입니다. Open(), Read(), Write() 메서드를 사용하여 파일을 처리합니다.
  • CArchive: 직렬화 클래스를 사용하여 객체의 상태를 파일에 저장하거나 파일에서 로드할 수 있습니다.

6. 컨트롤

  • MFC는 다양한 UI 컨트롤(버튼, 편집 상자, 리스트 박스 등)을 제공합니다. 각 컨트롤은 해당 클래스를 사용하여 생성하고 조작합니다.
  • 이벤트 처리: 각 컨트롤의 이벤트를 처리하기 위해 메시지 맵을 사용합니다.

7. 스레드 및 동기화

  • CWinThread: MFC에서 스레드를 생성하고 관리하는 클래스입니다. AfxBeginThread() 함수로 새로운 스레드를 시작합니다.
  • 동기화: CMutex, CSemaphore, CCriticalSection 등을 사용하여 스레드 간의 동기화를 관리합니다.

8. 리소스 관리

  • MFC 애플리케이션은 리소스를 통해 메뉴, 다이얼로그, 아이콘 등을 관리합니다. CWinApp::LoadResource() 메서드를 사용하여 리소스를 로드합니다.
  • 리소스 파일: .rc 파일을 사용하여 리소스를 정의합니다.

9. 이벤트 핸들링

  • MFC는 사용자 입력(마우스 클릭, 키 입력 등)에 대한 이벤트를 처리하기 위해 메시지 핸들러를 제공합니다.
  • 메시지 맵: 메시지 맵을 사용하여 특정 이벤트에 대한 처리 함수를 연결합니다.

10. 디버깅 및 오류 처리

  • ASSERT: 프로그램의 가정이 틀렸을 때 오류를 검출하는 데 사용되는 매크로입니다.
  • 예외 처리: MFC는 C++의 예외 처리 메커니즘을 지원하며, try/catch 블록을 사용하여 예외를 처리할 수 있습니다
728x90