페미위키:포크 프로젝트/리브레 위키/Microsoft Foundation Class Library

최근 편집: 2021년 11월 1일 (월) 23:26

윈도우 프로그래머의 원수

Microsoft Foundation Class Library는 Windows API를 C++의 클래스 모음으로 묶은 것이다.

특징

원래 윈도우의 API는 다양한 언어에서 포팅하기 쉽게 하려고 C언어의 함수로 구성되어 있다.[1]

하지만 이 API 함수로 코딩을 한다는 것이 쌩 노가다인지라, 네이티브하면서, 좀 더 개발하기 쉽게 하기 위해서는 C++가 딱 제격이고, API의 구조체나 함수를 모아 클래스로 만들어서 라이브러리화한 것이다.

메시지 맵

MFC의 가장 큰 특징이라면 이벤트 처리를 할 때 가상함수를 이용한 멤버함수 재정의가 아닌, 메시지 맵이라는 일종의 매크로를 이용하여 이벤트와, 그 이벤트를 처리할 멤버함수를 연결한다는 점이다.

조금 이상하게 보일지는 모르지만, 수십가지의 이벤트를 가상함수로 만들 경우, 이를 위한 메모리가 소모되는 것을 막기 위해 생겼다.

형식

SDI

Single Document Interface

하나의 Document Template[2]으로 이루어져 한번에 하나의 문서만 사용 가능하다.

대표적인 프로그램으로, 메모장이 있다.

MDI

Multi Document Interface

여러 개의 Document Template으로 이루어져 한번에 여러 개의 문서를 사용 가능하다. 화면 분할이 가능한 편집 툴이 여기에 속한다.

대표적인 프로그램으로, Microsoft Visual Studio가 있다.

Dialog Box

일반적인 버튼 누르고, 스크롤 내리고, 리스트나 콤보박스가 있는 프로그램들이 여기에 속한다. 물론, 위의 두 형식에서도 Dialog Box를 사용할 수 있지만, 프로그래밍시 이 형식을 선택하면 날코딩보다는 컨트롤 UI배치를 쉽게 할 수 있다. 하지만 다른 대체재들이 있기 때문에 Dialog Box는 사실 잘 선호되지 않는다. 그렇지만, 예전에 구현된 여러 기능들을 재사용하기 위해 어쩔 수 없이 쓰게 된다.

공용 컨트롤

버튼, 스태틱 컨트롤, 에디트 박스, 리스트박스, 프로그래스 바 등이 제공된다. 기본으로 제공되는 클래스를 상속해서 추기적인 기능을 구현할 수 있다.

사용자 정의 컨트롤

기존의 컨트롤 클래스를 상속하거나, 새로운 컨트롤 클래스를 제작하며, toolbox에서 사용자 정의 컨트롤을 선택해 UI를 배치하게 된다.

대체재

나온지 오래되었고 C++보다 C#을 밀고 있는 편인 마이크로소프트에 의해 찬밥취급을 받고 있다. 따라서 새로운 프로젝트일 경우 GUI를 구성할 때 다음과 같은 대체재들이 존재한다.

  • 윈도우에서만 동작한다면 C#의 Winform이나 WPF가 있다, Winform은 MFC처럼 Windows API를 래핑한 형태에 더 발전된 구조를 가지고 있고, WPF는 XML를 기반으로 윈도우를 디자인하고 하드웨어 가속을 받는 Direct2D로 컨트롤을 그린다. 덕분에 컨트롤을 꾸밀 수 있는 기능이 강력하다. 혹은 마이크로소프트에서 강력하게 밀고 있는 유니버설 윈도우 앱도 괜찮다. 이건 WPF와 비슷한 구조로 윈도우를 디자인한다.
  • 크로스플랫폼으로 동작하려 한다면, C++에서는 QTwxWidgets, C언어에서는 GTK+가 있다.
  • Java의 Swing이나 AWT는...... 잊어버리자......
  1. 좀 쓰인다 하는 언어들은 C언어 함수의 바인딩을 지원한다
  2. Mainframe 클래스, View 클래스, Document 클래스의 묶음. C++의 키워드가 아니다!

틀:프로그래밍