# Microsoft Foundation Classes

Microsoft Foundation Classes o MFC es un conjunto de clases interconectadas por múltiples relaciones de herencia, que proveen un acceso más sencillo a las API de Windows. Fueron introducidas por Microsoft en 1992 y desde entonces fueron apareciendo nuevas versiones con las actualizaciones del entorno de programación Visual C++, gracias a las cuales éste se convierte en un generador de programas C++ para Windows. Tiene una gran complejidad añadida debido a la necesidad de que el programador ahora no solamente debe controlar C/C++, sino que además debe conocer las clases de la MFC para poder utilizar su potencia. Con el paso del tiempo Microsoft Foundation Classes se ha convertido en la implementación estándar de la industria para la creación de aplicaciones gráficas en plataformas PC. A pesar de tener sus limitaciones, su adopción demuestra los beneficios de productividad de la reutilización de marcos comunes para desarrollar aplicaciones gráficas para negocios.

## Historia

MFC se introdujo en 1992 con C de Microsoft C++ 7.0 para ser utilizado con versiones de 16 bits de Windows como un sistema orientado a objetos C++ para la envoltura de la API de Windows. C++ estaba empezando a reemplazar a C para el desarrollo de software de aplicación comercial en el momento. C ha sido lentamente desplazado por las nuevas bibliotecas y lenguajes como son C++ y MFC, aunque muchos programadores opinan que MFC es únicamente un wrapper orientado a objetos de Windows API, ya que no disminuye mucho la complejidad y, en algunos casos, incluso la aumenta. Una interesante peculiaridad de MFC es el uso de Afx como prefijo para muchas funciones, macros y el nombre estándar de encabezado pre compilado stdafx.h. Durante el desarrollo temprano lo que se convirtió en MFC se llama Extensiones de Application Framework se abrevia como "Afx". El nombre de Microsoft Foundation Classes (MFC), fue adoptado demasiado tarde en el ciclo de lanzamiento para cambiar estas referencias. Una alternativa a MFC es la Windows Template Library (WTL). C++ versión Express compila aplicaciones WTL, pero no incluye el soporte IDE de las ediciones Standard, Professional y Team. El 7 de abril de 2008, Microsoft lanzó una actualización de las clases MFC como una actualización fuera de banda para Visual Studio 2008 y MFC-9. La actualización incluye nuevas construcciones de la interfaz de usuario, incluyendo la de cinta de Microsoft Office 2007 y la asociada widgets, barras de herramientas totalmente personalizables, paneles de conexión, como Visual Studio 2005 y las fichas de documento. Sin embargo, los elementos de la cinta se deben crear en el código, como en la API de RibbonX en Microsoft Office 2007. El Asistente para aplicaciones MFC también ha sido actualizado para soportar las nuevas características - incluyendo una casilla para seleccionar si la aplicación va a utilizar la cinta o el Visual Studio 2005 elementos de la interfaz de usuario. La nueva funcionalidad se proporciona en las clases para que las aplicaciones antiguas todavía sigan su curso.

## Versiones

| Versión del producto | Versión .Net | Librería | Versión MFC | Año en el que se introdujo |
| Microsoft C/C++ 7.0 | | | MFC 1.0 | 1993 |
| Visual C++ 1.0 | | | MFC 2.0 |
| Visual C++ 1.5 | | | MFC 2.5 |
| Visual C++ 1.51 | | | MFC 2.51 |
| Visual C++ 1.52c | | | MFC 2.5 (Last development platform for Windows 3.x) |
| Visual C++ 2.0 | | | MFC 3.0 |
| Visual C++ 2.1 | | | MFC 3.1 |
| Visual C++ 2.2 | | | MFC 3.2 |
| Visual C++ 4.0 | | | MFC 4.0 (mfc40.dll included with Windows 95) | Agosto de 1995 |
| Visual C++ 4.1 | | | MFC 4.1 |
| Visual C++ 4.2 | | | MFC 4.2 (mfc42.dll included with the Windows 98 original release) | Marzo de 1998 |
| eMbedded Visual C++ 3.0 | | mfc42.dll | MFC 4.2 |
| Visual C++ 5.0 | | mfc42.dll | MFC 4.21, a major upgrade from MFC 4.2. |
| Visual C++ 6.0 | | mfc42.dll | MFC 6.0 | 1998 |
| eMbedded Visual C++ 4.0 | | mfcce400.dll | MFC 6.0 |
| Visual C++ .NET 2002 (Visual C++ 7.0) | 1.0 | mfc70.dll | MFC 7.0 | Febrero de 2002 |
| Visual C++ .NET 2003 (Visual C++ 7.1) Visual C++ .NET 2003 + MS11-025 | 1.1 | mfc71.dll | MFC 7.1 MFC 7.10.6119.0 | Abril de 2003 Abril de 2011 |
| Visual C++ 2005 (Visual C++ 8.0) Visual C++ 2005 SP1 Visual C++ 2005 SP1 + MS09-035 Visual C++ 2005 SP1 + MS11-025 Visual C++ 2005 SP1 + MS11-025 | 2.0 | mfc80.dll | MFC 8.0.50727.42 MFC 8.0.50727.762 MFC 8.0.50727.4053 MFC 8.0.50727.5592 MFC 8.0.50727.6195 | Octubre de 2005 Junio de 2007 Julio de 2009 Abril de 2011 Junio de 2011 |
| Visual C++ 2008 (Visual C++ 9.0) Visual C++ 2008 with Feature Pack Visual C++ 2008 SP1 Visual C++ 2008 SP1 + MS09-035 Visual C++ 2008 SP1 + MS11-025 | 3.5 | mfc90.dll | MFC 9.0.21022.8 MFC 9.0.30411 MFC 9.0.30729.1 MFC 9.0.30729.4148 MFC 9.0.30729.5570 | Noviembre de 2007 Abril de 2008 Agosto de 2008 Julio de 2009 Abril de 2011 |
| Visual C++ 2010 (Visual C++ 10.0) Visual C++ 2010 + MS11-025 Visual C++ 2010 SP1 | 4.0 | mfc100.dll | MFC 10.0.30319.1 MFC 10.0.30319.415 MFC 10.0.40219.1 | Abril de 2010 Abril de 2011 Marzo de 2011 |
| Visual C++ 2012 (Visual C++ 11.0) Visual C++ 2012 Update 1 Visual C++ 2012 Update 3 | 4.5 | mfc110.dll | MFC 11.0.50727.1 MFC 11.0.51106.1 MFC 11.0.60610.1 | 26 de julio de 2012 5 de noviembre de 2012 26 de junio de 2013 |
| Visual C++ 2013 (Visual C++ 12.0) | 4.5.1, 4.5.2 | mfc120.dll | MFC 12.0.21005.1 | 5 de octubre de 2013 |
| Visual C++ 2015 (Visual C++ 14.0) Visual C++ 2015 Update 1 Visual C++ 2015 Update 2 Visual C++ 2015 Update 3 Visual C++ 2015 Update 3 + KB3165756 | 4.6 4.6.1 | mfc140.dll | MFC 14.0.23026.0 MFC 14.0.23506.0 MFC 14.0.23918.0 MFC 14.0.24210.0 MFC 14.0.24212.0 | 20 de julio de 2015 30 de noviembre de 2015 30 de marzo de 2016 27 de junio de 2016 2 de agosto de 2016 |
| Visual C++ 2017 (Visual C++ 15.0) | 4.6.2 | mfc140.dll | MFC 14.10.25008.0 | 7 de marzo de 2017 |

## Características

MFC proporciona C++ para Windows macros de tratamiento de mensajes (a través de mapas de mensajes), las excepciones en tiempo de ejecución e identificación del tipo RTTI, la serialización y la creación de instancias de clases dinámicas. Las macros para manejo de mensajes dirigidos a reducir el consumo de memoria, evitando el uso gratuito de tablas virtuales y también para proporcionar una estructura más concreta para diversos Visual C++ -suministrado herramientas para editar y manipular el código sin necesidad de analizar el lenguaje completo. Las macros de tratamiento de mensajes reemplazado el mecanismo de función virtual proporcionada por el C++.

## Usos

El Microsoft Foundation Class (MFC) de la biblioteca ofrece un ejemplo bien conocido de un software eficaz marco. El MFC es una biblioteca de clases C++ que proporciona una interfaz para la programación de Windows y al mismo tiempo encapsula el nivel inferior de la API Win32. Proporciona una gran cantidad de funcionalidades que se encuentran en Aplicaciones de Windows, como la gestión de documentos y la gestión de los distintos puntos de vista sobre los datos del documento, y a su vez proporciona una interfaz orientada a objetos que solucionan las complejas tareas que involucran la comunicación a través de redes, el acceso a la base de datos y gestión de documentos compuestos. Las aplicaciones de Windows se construyen mediante la especialización de los componentes que se encuentran en el marco de trabajo de MFC, como la Clases C View y C Document, para cumplir con los requisitos de la aplicación.