library - c++ gui
Alternativa a MFC (6)
Estoy en aproximadamente la misma posición: aplicación grande, código nativo, uso de MFC para el front-end. No veo ninguna alternativa realmente convincente, ni razones para cambiar a otra cosa.
Dicho esto, déjame ofrecer una opinión. Si estuviera haciendo un nuevo proyecto, que necesitaba preservar / heredar una gran cantidad de código nativo, consideraría intentar hacer un front-end de WPF con una aplicación principal en gran parte nativa (C ++ / CLI). Esto se hizo con Visual Studio 2010, y es en su mayor parte de rendimiento, por lo que es al menos posible. WPF tiene algunos beneficios de UI, y podría ser más fácil trabajar y probar (desde una perspectiva de automatización), ya que es un código CLR. No estoy seguro de que valga la pena la inversión y la curva de aprendizaje, pero es la alternativa que consideraría para una aplicación moderna de Windows pura con un montón de código nativo.
Espero que ayude.
https://stackoverflow.com/questions/149698/what-is-a-good-mfc-starting-book
Muchos de los comentarios actualizados afirman que hay alternativas mucho mejores. Me gustaría saber cuáles podrían ser.
Mi principal requisito es que la interfaz de usuario use los widgets nativos para que nuestro software de automatización pueda funcionar. Las ventanas dibujadas por el propietario son mucho más difíciles de manejar.
No me gusta particularmente el diseño de MFC, por lo que una alternativa sería buena. Solo uno que encontré es WX, que es el que ya hemos probado y estamos considerando abandonar. Necesitamos algo que no nos obligue a luchar con un montón de envoltorios multiplataforma que no nos importa. Estamos escribiendo una aplicación para Windows y el marketing no da una sola mierda sobre la orientación a Mac o Linux (sí, también hace daño a mi trasero).
He mirado la opción .NET un poco. El problema es que no sé mucho al respecto, pero por lo que puedo decir, tendremos que usar C # para obtener muchas de las opciones disponibles con MFC. El kit de herramientas C ++ / CLI no parece tener ventanas de acoplamiento a primera vista, por ejemplo. De hecho, una opción directa de WinFroms tampoco parece. Parece que tendríamos que hacer un proyecto WPF y eso no parece ser en absoluto lo que realmente queremos (y tendríamos un montón de basura que aprender, además de otro kit de herramientas). Mudarse fuera de C ++ también requeriría un montón de envoltura y no me gustan especialmente los resultados que he visto en las envolturas automáticas.
El otro problema que tengo con la opción .NET es que tenemos una aplicación de dibujo bastante intenso (además de requerir muchas formas). Sé que puedes obtener resultados similares con lenguajes JIT como .NET, pero también sé que debes tener mucho más cuidado para hacerlo. Es un tema que me gustaría evitar preocuparme en este momento.
El otro, y probablemente el problema más importante con .NET (al menos cambiar de idioma) es que tenemos una gran cantidad de lógica de interfaz que, aunque debería ser agnóstica de la API, está muy escrita en C ++.
¿Entonces cuáles son las otras opciones? ¿Estas personas realmente tienen puntos o están simplemente gritando contra algo que no sea su lenguaje o conjunto de herramientas favorito?
NOTA:
¿¿Cuál es el problema aquí?? ¡Dije específicamente que portar a otras plataformas NO es una consideración ni remotamente y que TENGO QUE TENER algo que usa el conjunto de widgets nativos para que no tengamos que cambiar por completo todo lo que usan las pruebas para automatizar el producto! ¿Alguien realmente leyó mi pregunta?
He visto Qt usado bastante extensivamente. Personalmente no he usado Qt, pero veo muchas preguntas al respecto, mucho más que wXwidgets o MFC. Yo empezaría con eso.
Los formularios de Windows funcionarán bien con C ++ / CLI. Los formularios de Windows también resultan ser un envoltorio alrededor de las asas WIN32.
No hay diferencia en las capacidades de C # / Windows Forms en comparación con C ++ / Windows Forms. (Solo compilan de manera diferente) Al igual que puedes hacer lo mismo con C # y VB.NET ...
Si está buscando ventanas de acoplamiento, hay una serie de bibliotecas de terceros que hacen esto. (Algunos son de código abierto, otros se pueden comprar). Debido al CLR, puede incluir directamente conjuntos escritos en un idioma diferente.
MFC no era malo en su día, pero se está volviendo un poco viejo. Un buen ejemplo serían las colecciones que se han reemplazado con las colecciones STL mucho mejores. Sin embargo, estabas preguntando sobre cosas GUI. Existe la WTL (Biblioteca de plantillas de Windows) que creo que ahora ha sido de código abierto. Una huella mucho más ligera que MFC, pero está diseñada para funcionar de la misma manera, por ejemplo, La mayoría de las clases tienen los mismos nombres y nombres de métodos.
En el lado negativo, he encontrado documentación relativamente escasa y no parece funcionar bien con los asistentes de Visual Studio. Sin embargo, este podría ser mi problema: conseguir que funcione con los asistentes de VS sería muy importante en mi humilde opinión.
Para ofrecer algo que no vi mencionado en las otras respuestas:
Por lo que parece, su única razón para necesitar controles nativos es ese software de automatización. Y la única razón para que el software de automatización funcione es para realizar pruebas. Asumiría que se están utilizando algunas series de pruebas automatizadas para garantizar que el software funcione según lo previsto.
Si ese es el caso, entonces hay algo que considerar: hay un patrón de diseño bastante popular en el reino C # / WPF llamado Model-View-ViewModel. Sin entrar en detalles excesivos aquí, la idea básica es que puede separar los controles GUI reales (la Vista) del código que maneja la forma en que esos controles interactúan con el resto de la lógica de negocios en la aplicación. Ese código es el llamado ViewModel. Entre otras cosas, esto se presta a diseños donde ViewModel (y todo el resto de la lógica de la aplicación) se pueden probar a través de métodos típicos de prueba de unidades sin necesidad de que los controles GUI estén presentes.
Por lo tanto, cualquier prueba para la que se utilice el software de automatización podría ser reemplazada por un código de prueba de unidad directa.
Sin embargo, mi propia experiencia en este ámbito no es tan extensa como me gustaría. Entonces, si consideras esto en absoluto, te sugiero una investigación más a fondo. Para empezar, los términos de búsqueda en Google como "Model-View-ViewModel" y "MVVM" deberían generar discusiones más detalladas sobre esa parte.
Qt es la única respuesta real para un juego de herramientas de GUI basado en C ++ en este momento (al menos para aplicaciones de escritorio completo). Incluso para aplicaciones puramente de Windows, vale la pena, también tiene una excelente integración con Visual Studio (obtener el complemento vs) y está muy bien documentado.
wx tiene algunos puntos interesantes, uno de ellos es muy similar al MFC en uso, pero con Qt en marcha LGPL wx se ha perdido la ventaja real.
Los widgets de edición Qt no son nativos, SIN EMBARGO, utilizan las API de estilo nativo, por lo que no se pueden distinguir de los widgets nativos, si utiliza los estilos predeterminados.