Microsoft Foundation Classes

Поделись знанием:
Перейти к: навигация, поиск

Пакет Microsoft Foundation Classes (MFC) — библиотека на языке C++, разработанная Microsoft и призванная облегчить разработку GUI-приложений для Microsoft Windows путём использования богатого набора библиотечных классов.





Принцип действия

Библиотека MFC, как и её основной конкурент, Borland VCL, облегчает работу с GUI путём создания каркаса приложения — «скелетной» программы, автоматически создаваемой по заданному макету интерфейса и полностью берущей на себя рутинные действия по его обслуживанию (отработка оконных событий, пересылка данных между внутренними буферами элементов и переменными программы и т. п.). Программисту после генерации каркаса приложения необходимо только вписать код в места, где требуются специальные действия. Каркас должен иметь вполне определенную структуру, поэтому для его генерации и изменения в Visual C++ предусмотрены мастера.

Кроме того, MFC предоставляет объектно-ориентированный слой обёрток (англ. wrappers) над множеством функций 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++ 20051 (Visual C++ 8.0) MFC 8.0 (mfc80.dll), .NET 2.0 октябрь 2005
Visual C++ 20081 (Visual C++ 9.0) MFC 9.0.21022 (mfc90.dll), .NET 3.5 ноябрь 2007
Visual C++ 20081 with Feature Pack MFC 9.0.30411 (mfc90.dll) апрель 2008
Visual C++ 20081 SP1 MFC 9.0.30729 (mfc90.dll) август 2008
Visual C++ 20081 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
  • 1 Библиотека MFC не входит в Visual Studio редакции Express.

Напишите отзыв о статье "Microsoft Foundation Classes"

Примечания

  1. [www.bcgsoft.com/about.htm BCGSoft: About us]

См. также

  • [msdn.microsoft.com/en-us/library/37f1f848%28v=vs.140%29.aspx Иерархия классов MFC]
  • Microsoft Windows Template Library (WTL) — облегчённая альтернатива библиотеке MFC

Отрывок, характеризующий Microsoft Foundation Classes

– Очень жаль, что вчера вы не застали меня. Я целый день провозился с немцами. Ездили с Вейротером поверять диспозицию. Как немцы возьмутся за аккуратность – конца нет!
Борис улыбнулся, как будто он понимал то, о чем, как об общеизвестном, намекал князь Андрей. Но он в первый раз слышал и фамилию Вейротера и даже слово диспозиция.
– Ну что, мой милый, всё в адъютанты хотите? Я об вас подумал за это время.
– Да, я думал, – невольно отчего то краснея, сказал Борис, – просить главнокомандующего; к нему было письмо обо мне от князя Курагина; я хотел просить только потому, – прибавил он, как бы извиняясь, что, боюсь, гвардия не будет в деле.
– Хорошо! хорошо! мы обо всем переговорим, – сказал князь Андрей, – только дайте доложить про этого господина, и я принадлежу вам.
В то время как князь Андрей ходил докладывать про багрового генерала, генерал этот, видимо, не разделявший понятий Бориса о выгодах неписанной субординации, так уперся глазами в дерзкого прапорщика, помешавшего ему договорить с адъютантом, что Борису стало неловко. Он отвернулся и с нетерпением ожидал, когда возвратится князь Андрей из кабинета главнокомандующего.
– Вот что, мой милый, я думал о вас, – сказал князь Андрей, когда они прошли в большую залу с клавикордами. – К главнокомандующему вам ходить нечего, – говорил князь Андрей, – он наговорит вам кучу любезностей, скажет, чтобы приходили к нему обедать («это было бы еще не так плохо для службы по той субординации», подумал Борис), но из этого дальше ничего не выйдет; нас, адъютантов и ординарцев, скоро будет батальон. Но вот что мы сделаем: у меня есть хороший приятель, генерал адъютант и прекрасный человек, князь Долгоруков; и хотя вы этого можете не знать, но дело в том, что теперь Кутузов с его штабом и мы все ровно ничего не значим: всё теперь сосредоточивается у государя; так вот мы пойдемте ка к Долгорукову, мне и надо сходить к нему, я уж ему говорил про вас; так мы и посмотрим; не найдет ли он возможным пристроить вас при себе, или где нибудь там, поближе .к солнцу.
Князь Андрей всегда особенно оживлялся, когда ему приходилось руководить молодого человека и помогать ему в светском успехе. Под предлогом этой помощи другому, которую он по гордости никогда не принял бы для себя, он находился вблизи той среды, которая давала успех и которая притягивала его к себе. Он весьма охотно взялся за Бориса и пошел с ним к князю Долгорукову.
Было уже поздно вечером, когда они взошли в Ольмюцкий дворец, занимаемый императорами и их приближенными.
В этот самый день был военный совет, на котором участвовали все члены гофкригсрата и оба императора. На совете, в противность мнения стариков – Кутузова и князя Шварцернберга, было решено немедленно наступать и дать генеральное сражение Бонапарту. Военный совет только что кончился, когда князь Андрей, сопутствуемый Борисом, пришел во дворец отыскивать князя Долгорукова. Еще все лица главной квартиры находились под обаянием сегодняшнего, победоносного для партии молодых, военного совета. Голоса медлителей, советовавших ожидать еще чего то не наступая, так единодушно были заглушены и доводы их опровергнуты несомненными доказательствами выгод наступления, что то, о чем толковалось в совете, будущее сражение и, без сомнения, победа, казались уже не будущим, а прошедшим. Все выгоды были на нашей стороне. Огромные силы, без сомнения, превосходившие силы Наполеона, были стянуты в одно место; войска были одушевлены присутствием императоров и рвались в дело; стратегический пункт, на котором приходилось действовать, был до малейших подробностей известен австрийскому генералу Вейротеру, руководившему войска (как бы счастливая случайность сделала то, что австрийские войска в прошлом году были на маневрах именно на тех полях, на которых теперь предстояло сразиться с французом); до малейших подробностей была известна и передана на картах предлежащая местность, и Бонапарте, видимо, ослабленный, ничего не предпринимал.
Долгоруков, один из самых горячих сторонников наступления, только что вернулся из совета, усталый, измученный, но оживленный и гордый одержанной победой. Князь Андрей представил покровительствуемого им офицера, но князь Долгоруков, учтиво и крепко пожав ему руку, ничего не сказал Борису и, очевидно не в силах удержаться от высказывания тех мыслей, которые сильнее всего занимали его в эту минуту, по французски обратился к князю Андрею.
– Ну, мой милый, какое мы выдержали сражение! Дай Бог только, чтобы то, которое будет следствием его, было бы столь же победоносно. Однако, мой милый, – говорил он отрывочно и оживленно, – я должен признать свою вину перед австрийцами и в особенности перед Вейротером. Что за точность, что за подробность, что за знание местности, что за предвидение всех возможностей, всех условий, всех малейших подробностей! Нет, мой милый, выгодней тех условий, в которых мы находимся, нельзя ничего нарочно выдумать. Соединение австрийской отчетливости с русской храбростию – чего ж вы хотите еще?
– Так наступление окончательно решено? – сказал Болконский.
– И знаете ли, мой милый, мне кажется, что решительно Буонапарте потерял свою латынь. Вы знаете, что нынче получено от него письмо к императору. – Долгоруков улыбнулся значительно.
– Вот как! Что ж он пишет? – спросил Болконский.
– Что он может писать? Традиридира и т. п., всё только с целью выиграть время. Я вам говорю, что он у нас в руках; это верно! Но что забавнее всего, – сказал он, вдруг добродушно засмеявшись, – это то, что никак не могли придумать, как ему адресовать ответ? Ежели не консулу, само собою разумеется не императору, то генералу Буонапарту, как мне казалось.
– Но между тем, чтобы не признавать императором, и тем, чтобы называть генералом Буонапарте, есть разница, – сказал Болконский.
– В том то и дело, – смеясь и перебивая, быстро говорил Долгоруков. – Вы знаете Билибина, он очень умный человек, он предлагал адресовать: «узурпатору и врагу человеческого рода».