Описание тега mfc
Платформа 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.