Пакет Microsoft Foundation Classes (MFC) — библиотека на языке C++, разработанная Microsoft и призванная облегчить разработку GUI-приложений для Microsoft Windows путём использования богатого набора библиотечных классов.
Принцип действия
Библиотека MFC, как и её основной конкурент, Borland VCL, облегчает работу с GUI путём создания каркаса приложения — «скелетной» программы, автоматически создаваемой по заданному макету интерфейса и полностью берущей на себя рутинные действия по его обслуживанию (отработка оконных событий, пересылка данных между внутренними буферами элементов и переменными программы и т. п.). Программисту после генерации каркаса приложения необходимо только вписать код в места, где требуются специальные действия. Каркас должен иметь вполне определенную структуру, поэтому для его генерации и изменения в Visual C++ предусмотрены мастера.
Кроме того, MFC предоставляет объектно-ориентированный слой «обёрток» над множеством функций Windows API, делающий несколько более удобной работу с ними. Этот слой представляет множество встроенных в систему объектов (окна, виджеты, файлы и т. п.) в виде классов и опять же берёт на себя рутинные действия вроде закрытия дескрипторов и выделения/освобождения памяти.
Добавление кода в каркас приложения
Добавление кода приложения к каркасу реализовано двумя способами. Первый использует механизм наследования: основные программные структуры каркаса представлены в виде классов, наследуемых от библиотечных. В этих классах предусмотрено множество виртуальных функций, вызываемых в определенные моменты работы программы. Путём доопределения (в большинстве случаев необходимо вызвать функцию базового класса) этих функций программист может добавлять выполнение в эти моменты своего кода.
Второй способ используется для добавления обработчиков оконных событий. Мастер создает внутри каркасов классов, связанных с окнами, специальные массивы — карты (оконных) сообщений (англ. message map), содержащие пары «ID сообщения — указатель на обработчик». При добавлении/удалении обработчика мастер вносит изменения в соответствующую карту сообщений.
История
Первая версия MFC была выпущена вместе с седьмой версией 16-разрядного компилятора языка C/C++ компании Microsoft в 1992 году. Для тех, кто занимался разработкой приложений с использованием API-функций, пакет MFC обещал весьма значительное повышение производительности процесса программирования.
Одной из примечательных особенностей MFC является префикс «Afx», используемый в именах многих функций, макросов и названии стандартного заголовочного файла «stdafx.h». На ранней стадии разработки, то, что впоследствии стало называться MFC, имело название «Application Framework Extensions» и аббревиатуру «Afx». Решение изменить название на Microsoft Foundation Classes (MFC) было принято слишком поздно, чтобы менять упоминания Afx в коде.
Object Windows Library (OWL), разработанная компанией Borland для работы с собственным компилятором C++, была конкурирующим продуктом, представленным в тот же период. В конце концов Borland прекратила разработку OWL и приобрела краткосрочную лицензию на использование библиотек для работы с MFC, но так и не предложила полной поддержки MFC в своих продуктах. Позднее Borland выпустила VCL в качестве замены OWL.
Упор компании Microsoft на MFC был ослаблен в пользу Microsoft .NET Framework. Однако, несмотря на это, MFC по-прежнему остается популярной среди разработчиков.
В апреле 2008 года Microsoft выпустила, после многолетнего бездействия, значительное обновление к MFC под названием MFC Feature Pack. Это обновление предлагалось к установке как дополнение к Visual Studio 2008. В основе своей это были добавочные классы MFC, права на которые были приобретены у российской фирмы BCGSoft[1]. В MFC включалась поддержка нового интерфейса Ribbon и несколько других усовершенствований, связанных с улучшенными интерфейсными элементами управления. После выпущенного пакета обновления для Visual Studio 2008 данные классы стали неотъемлемой частью MFC.
Версии
Версия продукта
|
Версия MFC
|
Дата выхода
|
Microsoft C/C++ 7.0
|
MFC 1.0
|
1992
|
Visual C++ 1.0
|
MFC 2.0 (введена архитектура документ-представление)
|
|
Visual C++ 1.5
|
MFC 2.5 (реализована поддержка технологий ODBC и drag-and-drop)
|
|
Visual C++ 1.52c
|
MFC 2.5 (последняя платформа разработки для MS Windows 3.x)
|
|
Visual C++ 2.0
|
MFC 3.0 (появилась возможность реализации многозадачности и поддержка Unicode)
|
|
Visual C++ 2.1
|
MFC 3.1
|
|
Visual C++ 2.2
|
MFC 3.2
|
|
Visual C++ 4.0
|
MFC 4.0 (mfc40.dll включена в состав Windows 95)
|
август 1995
|
Visual C++ 4.1
|
MFC 4.1
|
|
Visual C++ 4.2
|
MFC 4.2 (mfc42.dll включена в первоначальный выпуск Windows 98)
|
март 1998
|
eMbedded Visual C++ 3.0
|
MFC 4.2 (mfc42.dll)
|
|
Visual C++ 5.0
|
MFC 4.21 (mfc42.dll), значительное обновление MFC 4.2.
|
|
Visual C++ 6.0
|
MFC 6.0 (mfc42.dll)
|
1998
|
eMbedded Visual C++ 4.0
|
MFC 6.0 (mfcce400.dll)
|
|
Visual C++ .NET 2002 (Visual C++ 7.0)
|
MFC 7.0 (mfc70.dll), .NET 1.0
|
февраль 2002
|
Visual C++ .NET 2003 (Visual C++ 7.1)
|
MFC 7.1 (mfc71.dll), .NET 1.1
|
апрель 2003
|
Visual C++ 2005[2] (Visual C++ 8.0)
|
MFC 8.0 (mfc80.dll), .NET 2.0
|
октябрь 2005
|
Visual C++ 2008[2] (Visual C++ 9.0)
|
MFC 9.0.21022 (mfc90.dll), .NET 3.5
|
ноябрь 2007
|
Visual C++ 2008[2] with Feature Pack
|
MFC 9.0.30411 (mfc90.dll)
|
апрель 2008
|
Visual C++ 2008[2] SP1
|
MFC 9.0.30729 (mfc90.dll)
|
август 2008
|
Visual C++ 2008[2] Security Update (KB971092)
|
MFC 9.0.30729.4148 (mfc90.dll)
|
июль 2009
|
Visual C++ 2010
|
MFC 10.0.30319.1 (mfc100.dll), .NET 4.0
|
апрель 2010
|
Visual C++ 2010 SP1
|
MFC 10.0.40219.1 (mfc100.dll), .NET 4.0
|
март 2011
|
Visual C++ 2010 + MS11-025
|
MFC 10.0.30319.415 (mfc100.dll), .NET 4.0
|
апрель 2011
|
Visual C++ 2012 (Visual C++ 11.0)
|
MFC 11.0.50727.1 (mfc110.dll), .NET 4.5
|
26 июля 2012
|
Visual C++ 2012 Update 1 (Visual C++ 11.0)
|
MFC 11.0.51106.1 (mfc110.dll), .NET 4.5
|
5 ноября 2012
|
Visual C++ 2012 Update 3 (Visual C++ 11.0)
|
MFC 11.0.60610.1 (mfc110.dll), .NET 4.5
|
26 июля 2012
|
Visual C++ 2013 (Visual C++ 12.0)
|
MFC 12.0.21005.1 (mfc120.dll), .NET 4.5.1
|
5 октября 2013
|
Visual C++ 2013 Update 2 (Visual C++ 12.0)
|
MFC 12.0.30501.0 (mfc120.dll), .NET 4.5.1
|
30 декабря 2014
|
Visual C++ 2015 (Visual C++ 14.0)
|
MFC 14.0.23026.0 (mfc140.dll), .NET 4.6
|
20 июля 2015
|
Visual C++ 2015 Update 1 (Visual C++ 14.0)
|
MFC 14.0.23506.0 (mfc140.dll), .NET 4.6.1
|
30 ноября 2015
|
Visual C++ 2015 Update 2 (Visual C++ 14.0)
|
MFC 14.0.23918.0 (mfc140.dll)
|
30 марта 2016
|
Visual C++ 2015 Update 3 (Visual C++ 14.0)
|
MFC 14.0.24210.0 (mfc140.dll)
|
27 июня 2016
|
Visual C++ 2015 Update 3 + KB3165756
|
MFC 14.0.24212.0 (mfc140.dll)
|
2 августа 2016
|
Visual C++ 2017 (Visual C++ 15.0)
|
MFC 14.10.25008.0 (mfc140.dll), .NET 4.6.2
|
7 марта 2017
|
Примечания
См. также
|
---|
Низко- уровневые | |
---|
Высоко- уровневые | Amiga OS | |
---|
Mac OS и macOS | |
---|
Windows | |
---|
UNIX, под X | |
---|
Кросс- платфор- менные | На основе Flash | |
---|
На основе XML, AJAX или SVG | |
---|
На основе Java | |
---|
На основе C или C++ | |
---|
На основе Common Lisp | |
---|
На основе Pascal | |
---|
На основе Python | |
---|
На основе Objective C | |
---|
|
---|
|
---|