Введение
Microsoft Foundation Class Library (MFC) — это объектно-ориентированная библиотека C++ для разработки настольных приложений под Windows. MFC был представлен компанией Microsoft в 1992 году и быстро получил широкое распространение. Несмотря на то, что Microsoft с тех пор представила альтернативные прикладные фреймворки, MFC по-прежнему широко используется.
Microsoft Foundation Class Library (MFC) is a C++ object oriented library for developing desktop applications for Windows. MFC was introduced by Microsoft in 1992 and quickly gained widespread use. While Microsoft has introduced alternative application frameworks since then, MFC remains widely used.
История
MFC был представлен в 1992 году вместе с компилятором Microsoft C/C++ 7.0 для использования с 16-битными версиями Windows как чрезвычайно тонкая объектно-ориентированная оболочка C++ для API Windows. В то время C++ только начинал вытеснять C при разработке коммерческого прикладного программного обеспечения. В программе MFC прямые вызовы API Windows редко требуются. Вместо этого программы создают объекты из классов Microsoft Foundation Class и вызывают методы-члены этих объектов. Многие из этих методов имеют те же имена, что и соответствующие функции API. Одной из особенностей MFC является использование префикса "Afx" для многих функций, макросов и стандартного предварительно скомпилированного заголовочного файла "stdafx.h". Во время ранней разработки то, что впоследствии стало MFC, называлось "Расширения каркаса приложений" и сокращенно "Afx". Название Microsoft Foundation Classes (MFC) было принято слишком поздно в цикле выпуска, чтобы изменить эти ссылки. MFC 8.0 был выпущен вместе с Visual Studio 2005. MFC 9.0 был выпущен вместе с Visual Studio 2008. 7 апреля 2008 года Microsoft выпустила обновление для классов MFC как внеочередное обновление для Visual Studio 2008 и MFC 9. Это обновление включает в себя новые элементы пользовательского интерфейса, такие как ленты и связанные с ними элементы управления, полностью настраиваемые панели инструментов, панели закрепления, которые могут свободно перемещаться или закрепляться с любой стороны, и вкладки документов. Изначально MFC был функцией коммерческих версий Visual Studio. Соответственно, он не входит в состав бесплатной Visual C++ Express. Однако Community Edition Visual Studio, представленная в 2014 году, включает в себя MFC. Object Windows Library (OWL), разработанная для использования с компилятором Borland Turbo C++, была конкурирующим продуктом, представленным Borland примерно в то же время. В конечном итоге Borland прекратил разработку OWL и на короткое время лицензировал распространение заголовков, библиотек и DLL MFC от Microsoft, хотя и не предлагал полноценной интегрированной поддержки MFC. Позже Borland выпустила Visual Component Library в качестве замены фреймворку OWL.
Особенности
MFC — это библиотека, которая оборачивает части Windows API в классы C++, включая функциональность, позволяющую использовать стандартную структуру приложения. Определены классы для многих управляемых объектов Windows, а также для предопределенных окон и общих элементов управления. При появлении MFC предоставлял макросы C++ для обработки сообщений Windows (через карты сообщений), исключения, идентификацию типа во время выполнения (RTTI), сериализацию и динамическое создание экземпляров классов. Макросы для обработки сообщений были направлены на снижение потребления памяти за счет избежания избыточного использования виртуальных таблиц, а также на обеспечение более четкой структуры для различных инструментов, поставляемых с Visual C++, для редактирования и манипулирования кодом без разбора всего языка. Макросы обработки сообщений заменили механизм виртуальных функций, предоставляемый C++. Макросы для сериализации, исключений и RTTI появились за несколько лет до реализации этих функций в Microsoft C++. 32-битные версии MFC для Windows NT 3.1 и более поздних операционных систем Windows использовали компиляторы, реализующие языковые средства, и обновляли макросы, чтобы они просто оборачивали эти средства, а не предоставляли собственные реализации, обеспечивая обратную совместимость. Редактор ресурсов ленты MFC позволяет разработчику проектировать ленту графически, вместо использования декларативной разметки на основе XML, как в RibbonX API. Компоненты ленты могут быть запрограммированы напрямую с помощью нового набора методов классов ленты. Разработчик может комбинировать графическую и программную разработку ленты по своему усмотрению. Мастер приложений MFC также был обновлен для поддержки новых функций, включая флажок для выбора использования ленты или панелей закрепления в приложении. Новая функциональность реализована в новых классах, чтобы старые приложения продолжали работать. Microsoft ввела дополнительные лицензионные требования для пользователей лент, включая соблюдение рекомендаций Microsoft по разработке пользовательского интерфейса и антиконкурентное положение, запрещающее использование пользовательского интерфейса в приложениях, конкурирующих с Microsoft Office. MFC можно использовать, подключив статическую библиотеку или добавив MFC DLL.
Версии
Версия библиотекиДата выпускаНазвание Microsoft C/C++ 7.0 mafxcw. lib MFC 1.0 1992Microsoft Visual C++ 1.0 Visual C++ 1.0 mfc200. dll MFC 2.0 Визуальный C++ 1.5 mfc250. dll MFC 2.5 Визуальный C++ 1.51 mfc250. dll MFC 2.51 Визуальный C++ 1.52c mfc250. dll MFC 2.5 (Последняя платформа разработки для Windows 3. x) Microsoft Visual C++ 2.0 Visual C++ 2.0 mfc30. dll MFC 3.0 Визуальный C++ 2.1 mfc30. dll MFC 3.1 Визуальный C++ 2.2 mfc30. dll MFC 3.2Microsoft Visual C++ 4.0 Visual C++ 4.0 mfc40. dll MFC 4.0 (mfc40. dll, входящий в состав Windows 95) Август 1995 Visual C++ 4.1 mfc40. dll MFC 4.1 Визуальный C++ 4.2 mfc42. dll MFC 4.2 (mfc42. dll, включенный в оригинальный выпуск Windows 98) Март 1998 eВнедренный Visual C++ 3.0 mfc42. dll MFC 4.2Microsoft Visual C++ 5.0 Visual C++ 5.0 mfc42. dll MFC 4.21Microsoft Visual C++ 6.0 Visual C++ 6.0 mfc42. dll MFC 6.0 1998 eВнедренный Visual C++ 4.0 mfcce400. dll MFC 6.0Microsoft Visual C++ NET 2002Visual C++ NET 2002 (Visual C++ 7.0) mfc70. dllMFC 7.013 февраля 2002Microsoft Visual C++ NET 2003Visual C++ NET 2003 (Visual C++ 7.1)mfc71. dllMFC 7.124 апреля 2003Visual C++ NET 2003 + MS11 025 (KB2465373)MFC 7.10.6119.012 апреля 2011Microsoft Visual C++ 2005Visual C++ 2005 (Visual C++ 8.0)mfc80. dll8.0.50727.4210 апреля 2006Visual C++ 2005 SP18.0.50727.76227 августа 2007Visual C++ 2005 SP1 + MS09 035 (KB973544)8.0.50727.405328 июля 2009Visual C++ 2005 SP1 + MS11 025 (KB2467175)8.0.50727.6195 (включен в redist 8.0.61000/8.0.61001)14 июня 2011Visual C++ 2005 SP1 + MS11 025 (KB2643995)8.0.50727.622925 января 2021Microsoft Visual C++ 2008Visual C++ 2008 (Visual C++ 9.0) mfc90. dll9.0.21022.819 ноября 2007Visual C++ 2008 + MS09 035 (KB973551)Visual C++ 2010 + MS11 025 (KB2467173) Visual C++ 2013 Обновление 5 + KB403293812.0.40664.018 июля 2017 Microsoft Visual C++ 2015Visual C++ 2015 (Visual C++ 14.0) mfc140. dll14.0.23026.020 июля 2015Visual C++ 2015 Обновление 114.0.23506.030 ноября 2015Visual C++ 2015 Обновление 2 14.0.23918.030 марта 2016Visual C++ 2015 Обновление 314.0.24210.027 июня 2016Visual C++ 2015 Обновление 314.0.24212.018 августа 2016Visual C++ 2015 Обновление 3 + KB316575614.0.24215.115 сентября 2016Visual C++ 2015 Обновление 314.0.24516.023 октября 2021Microsoft Visual C++ 2017Visual C++ 15.0mfc140. dll14.10.25008.07 марта 2017Visual C++ 15.114.10.25017.05 апреля 2017Visual C++ 15.214.11.25325.010 мая 2017Visual C++ 15.414.12.25810.09 октября 2017Visual C++ 15.614.13.26020.05 марта 2018Visual C++ 15.714.14.26405.07 мая 2018Visual C++ 15.7.314.14.26429.431 мая 2018Visual C++ 15.814.15.26706.014 августа 2018Visual C++ 15.914.16.27012.613 ноября 2018Visual C++ 15.9.514.16.27024.18 января 2019Visual C++ 15.9.614.16.27026.124 января 2019Visual C++ 15.9.914.16.27027.112 марта 2019Visual C++ 15.9.1514.16.27033.013 августа 2019Microsoft Visual C++ 2019Visual C++ 16.0.0mfc140. dll14.20.27508.12 апреля 2019Visual C++ 16.1.014.21.27702.221 мая 2019Visual C++ 16.2.014.22.27821.024 июля 2019Visual C++ 16.3.014.23.27820.023 сентября 2019Visual C++ 16.4.014.24.28127.43 декабря 2019Visual C++ 16.5.014.25.28508.316 марта 2020Visual C++ 16.6.014.26.28720.319 мая 2020Visual C++ 16.6.314.26.28808.130 июня 2020Visual C++ 16.7.014.27.29016.05 августа 2020Visual C++ 16.7.514.27.29112.029 сентября 2020Visual C++ 16.7.814.27.29114.010 ноября 2020Последняя версия библиотеки, официально поддерживающая Windows XP. 10 ноября 2020Visual C++ 16.8.014.28.29325.210 ноября 2020Visual C++ 16.8.214.28.29334.019 ноября 2020Visual C++ 16.9.014.28.29910.02 марта 2021Visual C++ 16.9.214.28.29913.016 марта 2021Visual C++ 16.9.414.28.29914.013 апреля 2021Visual C++ 16.10.014.29.30037.025 мая 2021Visual C++ 16.10.214.29.30038.015 июня 2021Visual C++ 16.10.414.29.30040.020 июля 2021Visual C++ 16.11.014.29.30133.010 августа 2021Visual C++ 16.11.414.29.30135.05 октября 2021Visual C++ 16.11.914.29.30139.011 января 2022Visual C++ 16.11.3214.29.30153.014 ноября 2023Microsoft Visual C++ 2022Visual C++ 17.0.0RCmfc140. dll14.30.30704.013 октября 2021Visual C++ 17.0.514.31.30708.014 января 2022Visual C++ 17.1.014.31.30818.027 октября 2021Visual C++ 17.1.014.31.30919.023 декабря 2021Visual C++ 17.1.014.31.31005.026 января 2022Visual C++ 17.1.014.31.31103.026 января 2022Visual C++ 17.2.014.32.31302.017 марта 2022Visual C++ 17.2.014.32.31326.09 апреля 2022Visual C++ 17.2.514.32.31332.01 июля 2022Visual C++ 17.4.014.34.31931.09 ноября 2022Visual C++ 17.4.514.34.31938.014 февраля 2023Visual C++ 17.6.014.36.32532.016 мая 2023Visual C++ 17.7.114.38.32919.011 августа 2023Visual C++ 17.8.014.38.33130.015 ноября 2023Visual C++ 17.8.614.38.33135.06 февраля 2024Visual C++ 17.9.414.40.33617.119 марта 2024