Этот тег следует использовать для вопросов, касающихся библиотеки Microsoft Foundation Class (MFC), платформы C++ для программирования графических приложений Windows для настольных ПК. Вы должны указать тег для используемой версии C++ или Visual Studio. Из-за размера MFC могут оказаться полезными дополнительные теги, такие как [com], [wininet], [winapi] или другие тематические теги.

Платформа Microsoft Foundation Class (MFC) предоставляет объектно-ориентированный уровень абстракции поверх большого подмножества Win32 API. MFC предлагает ряд классов и шаблонов, охватывающих почти все функции, используемые при разработке настольных приложений Windows. Он предоставляет модели архитектуры для приложения, в котором оно будет построено, а именно документ - модель - представление, доступное в трех вариантах:

  • Приложения SDI (интерфейс на одной бумаге: одно окно),
  • MDI (многодокументный интерфейс: несколько окон)
  • Диалоговые приложения (интерфейс модального диалогового окна).

Существует несколько шаблонов приложений, поставляемых Visual Studio, которые обеспечивают отправную точку для создания внешнего вида нового приложения. Новые шаблоны с новыми функциями и поведением, которые можно увидеть в приложениях Microsoft (закрепляемых окнах), таких как Visual Studio, были введены на протяжении многих лет.

MFC использует единую модель наследования языка C++ (т.е. без множественного наследования); все классы образуют иерархию. Новые классы MFC обозначаются префиксом CMFC, как вCMFCPropertyPage, или добавив суффикс Ex, как вCPropertyPageEx учебный класс.

Почти все классы MFC наследуются от CObject и все классы окон или классы управления наследуются от CWnd class, который является базовым классом для всех окон и включает в себя все основные операции, выполняемые с окном, такие как изменение размера или перемещение окна.

Эта диаграмма MSDN дает нам представление об иерархии классов:
http://msdn.microsoft.com/en-us/library/ws8s10w4.aspx

Для разработки пользовательского интерфейса Windows MFC представляет собой очень тонкий слой над Win32 API и, следовательно, столь же быстр, как собственное приложение Win32 GUI. Некоторые классы, например сокеты и сети, можно считать немного толще. Для COM и связанных с ним вещей он считается довольно тяжелым (и, следовательно, предпочтительным является ATL).

Модель MFC может казаться ограничивающей в том смысле, что, когда архитектура приложения не совсем соответствует парадигме MFC для настольного приложения с графическим интерфейсом пользователя, инфраструктуру может быть сложно расширить без обхода мастеров классов Visual Studio и выбора ручного кодирования.

Для новой разработки контейнеры STL должны быть предпочтительнее исходных контейнеров MFC (CList, CArray и т. Д.). Почему контейнеры STL предпочтительнее контейнеров MFC?

Поддержка многопоточности MFC несколько сложна, а многопоточность и сопрограммы C++17/C++20 могут быть лучшим подходом для фоновых рабочих потоков. Однако MFC имеет хорошую поддержку потоков пользовательского интерфейса, для которых требуется насос сообщений, а также поддержка библиотеки синхронизации потоков WinAPI.

В то время как более ранние версии Visual Studio предоставляли простой выбор для установки компонентов MFC в качестве одного из нескольких стандартных пакетов, в более поздних версиях MFC, по-видимому, является дополнительной опцией, которую необходимо включить.

Подробнее на http://en.wikipedia.org/wiki/Microsoft_Foundation_Class_Library.