¿Cuáles son las características de MFC, WTL, WPF, wxWidgets, Qt y GTK?
El marco solo puede considerarse como una especie de arte escénico. Si continúa desarrollándose, se volverá inútil. Por ejemplo, el código es demasiado complejo, la compilación es demasiado lenta y la depuración es difícil. resolver.
Y el embalaje está incompleto, HWND HDC y similares se pueden encontrar en todas partes.
El objetivo principal es escribir algunos programas pequeños o como parte de implementación de back-end de otros marcos de UI. Por ejemplo, escribí un pequeño marco para instalar y desinstalar programas. Es muy pequeño y la parte que crea la ventana de administración es WTL.
Biblioteca de clases MS-VisualC++ (abreviatura de Microsoft Foundation Class)
Es un paquete Win API más avanzado, más completo que el paquete WTL y es difícil ver el HWND. .
HDC también proporciona muchas clases de utilidades, como controles avanzados, contenedores universales, acceso IO, protocolos de red, etc. Además, también proporciona algunos marcos básicos, como
Document/View es una versión simplificada de MVC. Solo tiene MV, pero no hay restricciones en la gestión de datos y la transmisión de mensajes, lo que conduce a la. mal uso de Doc/View.
Maldita sea. Especialmente para los modelos de procesamiento de eventos, el mapeo de mensajes es un enfoque simple y propenso a errores cuya única ventaja es el buen rendimiento. De VC++
MFC nació en 1. x En ese momento, las ideas de diseño de toda la comunidad de UI estaban relativamente atrasadas (excepto Apple), y MFC estaba cargado con una gran carga de compatibilidad, como vc ++.
El programa MFC 1.52 se puede compilar en vc2003 con ligeras modificaciones. Como resultado, MFC no se desarrolló en el período posterior. Solo mejoró algunos detalles de las ideas anteriores y agregó algunos componentes. un diseño fundamental.
El problema no ha mejorado.
GTK, que ha sufrido desventajas de lenguaje, es realmente complicado de escribir orientado a objetos en C. Aunque es ideológicamente más avanzado que MFC, el código escrito es mucho más detallado que MFC. En comparación con MFC, existen más conceptos de diseño y señales/ranuras en el procesamiento de eventos, aunque su uso es muy problemático.
wxWidgets,
Este es básicamente un MFC multiplataforma que abstrae las diferencias entre diferentes plataformas. De hecho, la mayor parte del backend se implementa mediante la API nativa de la plataforma y muchos controles son directamente nativos del sistema. Existe una
versión wxWidgets para
GTK+, el backend es GTK+ y wxWidgets es el shell. Esta es también la ventaja de wxWidgets. El paquete de distribución del programa compilado por WxWidgets es relativamente pequeño y tiene buen rendimiento.
Estos son los aspectos técnicos del marco de UI en la década de 1990, y hasta ahora no ha habido mucho progreso.
Hablemos primero de la tecnología del siglo XXI.
Qt,
Aunque también apareció en los años 90, ha experimentado grandes avances en el siglo XX. Cabe decir que su punto de partida es relativamente alto. Desde el principio, se posiciona como multiplataforma y no se contenta con encapsular las API del sistema, sino que necesita crear un conjunto completo de API y marcos por sí mismo. incluso reemplazar las API del sistema. Por lo tanto, no se trata solo de la interfaz de usuario, sino de todo lo que se utiliza en el desarrollo de aplicaciones, incluidas las redes, las bases de datos y los multimedia.
Motor de script, etc. Signal/slot fue inventado por Qt y es la mejor implementación del modelo de notificación de eventos en lenguaje C++. Incluso yo creo que debería incluirse en el estándar C++, y supongo que el comité de C++ también es muy terco.
Nunca escribimos GUI.
Los primeros QT no tenían el concepto de DirectUI y cada QWidget correspondía a una ventana nativa. A partir de Qt4.4, solo hay capas superiores.
QWidget es una ventana nativa y los sub-Widgets son heterogéneos.
El widget es solo una capa abstracta que no corresponde a la ventana nativa. Implementa el concepto de DirectUI y hace posibles muchos efectos gráficos, como efectos de transparencia en cascada de ventanas.
QPA (Qt Platform Abstraction) se implementó después de 4.8, lo que facilita la migración de Qt. Actualmente Qt es uno de los frameworks que más plataformas soporta.
Debido a problemas iniciales de licencia, Qt no era muy amigable con la comunidad de código abierto, lo que resultó en una promoción insatisfactoria hasta que se cambió al modelo LGPL. Si Qt puede superarlo temprano, me temo que no habrá espacio para que wxWidgets sobreviva.
QT también tiene algunas desventajas, es decir, es demasiado grande, pero puedes cortarlo tú mismo. Puedo reducir la biblioteca Qt a 2,5 MB después de comprimir el paquete de distribución.
WPF,
Microsoft ganó
Después de pensar que Form llegó a un callejón sin salida, finalmente decidí desarrollar la biblioteca UI de la manera correcta. La interfaz de usuario del siglo XXI definitivamente ya está definida y nunca podrá escribirse en código, por lo que XAML es la razón.
La poderosa herramienta de definición no solo puede definir el diseño de la interfaz de usuario, sino que también incluye efectos de animación gráfica y métodos de respuesta de mensajes. Con el excelente lenguaje C#, es aún más poderoso. Pero el problema también es obvio, es decir, es demasiado grande.
El desarrollo no solo requiere enormes IDE y herramientas de diseño, sino que también los paquetes de instalación lanzados son enormes, por lo que actualmente pocas personas escriben clientes de software de propósito general con él, y la mayoría escribe clientes de propósito especial al hacerlo. proyectos empresariales.
Hace unos 4 o 5 años, escribí un QQ usando WPF. Solo implementaba las funciones básicas, pero era mucho más grande que el cliente C++ y se ejecutaba muy lentamente. La razón principal era el consumo de memoria. era demasiado grande. En ese momento, la optimización de WPF aún no era suficiente.
Finalmente, me gustaría agregar al verdadero rey de las bibliotecas de UI, Coco.
Hay muchas razones para el éxito de Apple, una de ellas es el cacao. El concepto de Coco es muy avanzado y surgió muy temprano. Sospecho que Qt y WPF tienen muchas ideas de Cocoa.
Interfaz de usuario clara. Con xib, se pueden definir la mayoría de los detalles de la interfaz de usuario y se proporciona una herramienta de diseño visual WYSIWYG.
MVC estricto, con una definición muy clara y una clara división del trabajo.
Señal/ranura, aunque no se llama así, la idea sí lo es, y realmente se puede conectar arrastrando el ratón.
Proporciona ARC, cierre y reflexión, lo que aporta una gran comodidad al desarrollo de la interfaz de usuario. Por supuesto, esto se debe al lenguaje Objective-C.
Agregados Borland's Owl y VCL.
Comencé a usar Borland C++3.0 y Delphi 1.0. En ese momento, Borland parecía prometedor. Desafortunadamente, una serie de malas decisiones han provocado que la empresa prácticamente desaparezca. Estudiantes, por favor no vuelvan a saltar a este pozo.
OWL solía ser competidor de MFC y sus ideas de diseño eran similares. Personalmente, creo que el diseño API de OWL es más elegante, pero MFC derrotó por completo a OWL en el mercado.
Delphi
Es una obra maestra. No tuvo rivales en el campo de RAD (desarrollo rápido de aplicaciones) durante mucho tiempo hasta que la arquitectura BS reemplazó a la arquitectura CS. Delphi se caracteriza por su simplicidad y rápida velocidad de desarrollo. Simplemente escriba una aplicación básica utilizable.
Hablando de eso, puede que no haya nadie más rápido que él hasta ahora, pero la desventaja es que es feo. Básicamente, la mayoría de las aplicaciones Delphi son un montón de controles apilados, lo cual es muy feo. Además, debido a las limitaciones del lenguaje Pascal, no se puede igualar.
Hay mucha fusión de código C/C++. Aunque existe C++
Builder, las ventajas de simplicidad y velocidad en Builder han desaparecido. El compilador C ++ de Borland está empeorando cada vez más, lo que hace que los proyectos de código abierto no estén dispuestos a ser compatibles con este compilador.
VCL no es enteramente una biblioteca de UI, sino un conjunto de especificaciones de interfaz de componentes, similar a COM ActiveX. Tanto Delphi como C++builder crean bibliotecas básicas basadas en esta especificación.
Las bibliotecas de UI son un tema enorme que podría tratarse en varios libros. Sólo escribo mis sentimientos aquí.
No tiene sentido simplemente discutir las ventajas y desventajas de cada biblioteca. Debe colocarse en escenarios de aplicación específicos. Cada biblioteca tiene sus propios escenarios buenos.
Si solo ejecuta programas pequeños en Windows y usa WTL para implementar las deficiencias usted mismo, el efecto visual será terrible.
Si pudiera ser más grande y con mejor apariencia, sería Qt.
Si no te importa en absoluto el tamaño y solo quieres que las imágenes sean hermosas, usa WPF.
Si también se tiene en cuenta el precio de las herramientas de desarrollo, los ricos elegirán WPF.
MFC es inútil a menos que sus ingenieros actuales no puedan usar nada más, o que existan códigos históricos heredados que sean compatibles.
Si se requiere multiplataforma, entonces Qt, wxWidgets y GTK+ no tienen ninguna ventaja sobre el Qt actual.
Si se trata de iOS Android, es mejor utilizar la biblioteca de interfaz de usuario nativa, a menos que estés escribiendo un juego.