Forma moderna y nativa de crear aplicaciones GUI WinAPI en C++ [cerrado]


Primero, sé que esta es una pregunta común, pero no pude encontrar la respuesta exacta que estoy buscando.

He hecho muchos proyectos en Java usando Swing. Empezando por codificar la GUI, y luego pasando a los diseñadores de GUI. Esto resultó ser una muy manera rápida y fácil de construir aplicaciones GUI.

Pero ahora, necesito pasar a C++. Estoy empezando un proyecto que utiliza una gran cantidad de recursos de HW (DirectX, OpenCV, etc...) Sé que hay bibliotecas Java para estas tecnologías. Sin embargo, C++ es definitivamente el camino correcto, considerando los aspectos internos de este proyecto.

Conozco bien los lenguajes C y C++ de la programación de MCU. Además, he leído muchos artículos sobre programación nativa de WinAPI, internos de Windows, etc. Creo que tengo suficiente conocimiento para empezar. No quiero preocuparme mucho por el diseño de GUI, pero debe parecer apropiado.

Sé que hay pocas opciones básicas: Pure WinAPI, MFC, WTL, Qt... Estaría muy contento si hubiera algún tipo de diseñador de GUI herramienta, pero de mi investigación, no la hay. Existe el asistente MFC que ayuda a crear una ventana básica, pero no es un diseñador. Lo más cercano que encontré fue Qt. Pero por lo que leí, no está usando WinAPI para dibujar, ya que en el futuro la apariencia de la aplicación escrita Qt puede diferir de la apariencia nativa de Windows.

Así que, para resumir, por favor, si tiene experiencia en la creación de aplicaciones nativas de Windows C++ con GUI, ¿qué me recomendaría? Específicamente, ¿hay alguna herramienta o diseñador I ¿fallaste?

(Estoy usando Visual Studio 2010 professional, ya que lo tengo gratis gracias al proyecto DreamSpark)

Author: herrpark, 2012-03-16

7 answers

Recientemente usé Qt4 y estaba muy satisfecho con la API. Me pareció sencillo, bien documentado, y el código es extremadamente conciso.

Qt hace un trabajo extremadamente bueno emulando la apariencia del sistema operativo objetivo (como @In silico señaló en los comentarios, Qt realmente dibuja todo por sí mismo y no usa componentes nativos) Sin embargo, esto puede ser codificado a mano o visualmente a través del editor GUI en su IDE, Qt Creator . Si vas por esta ruta, yo recomiende crear su proyecto GUI inicial (archivo .pro) allí, luego importarlo a Visual Studio a través del complemento Qt Visual Studio.

Slots and signals, el sistema de eventos/mensajería de Qt, también vale la pena mencionar. Sí, es fundamental para la programación GUI, pero también podría ser extremadamente útil en código de nivel inferior.

Espero que Qt funcione bien en su proyecto, pero como siempre, cree algunas pruebas simples para garantizar que las tecnologías funcionen juntas de manera factible.

 9
Author: Courtney Christensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-16 14:13:07

Puede usar el C++Builder XE2 (Parte del IDE de Rad Studio), que incluye la VCL (Visual Component Library), la VCL es una envoltura sobre los controles de Windows (y también incluye controles personalizados) que aumentan la productividad del desarrollo.

 3
Author: RRUZ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-15 23:49:55

Aquí hay algunos consejos:

  • No te encierres en C++. C# y Java (por ejemplo) pueden ser fácilmente intercaladas con C/C++. (A través de PInvoke o C++ / CLI para el primero y JNI para el segundo). C++ puede no ser el lenguaje ideal para escribir una GUI rápidamente.

  • Su requisito de" aspecto nativo de windows " es arbitrario y debe pensarlo. ¿Eso es realmente lo que necesitas ?

  • Winforms. Es una tecnología más antigua, pero todavía se usa ampliamente. Usted usa la API de C++/CLI o C# (o cualquier lenguaje. NET).

  • WPF, una API más reciente pero que será más difícil de manejar desde C++, (mejor con C# o VB)

  • Uno de los muchos kit de herramientas GUI disponibles en el mercado que tienen una API C o C++ (QT, GTK, wxWidgets, el VCL,... listar aquí ). Algunos tienen un aspecto "nativo", otros no. Algunos tienen diseñadores otros no. Algunos son libres, otros no.

 3
Author: J.N.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-15 23:59:29

Si necesita una interfaz de usuario simple, recomiendo usar WTL: es una biblioteca simple, liviana, de solo encabezado, muy buena envoltura sobre WinAPI. En Visual Studio puede usar el diseñador de formularios para crear ventanas y usar clases WTL para implementar la interacción con el usuario. WTL tiene poca documentación, pero WTL se parece a MFC.

Si quieres posibilidades ricas te recomiendo usar Qt. Es un framework GUI muy poderoso con una gran comunidad.

 3
Author: Torsten,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-16 07:34:38

La biblioteca de clases wxWidgets c++ viene con un creador de pantallas .

 3
Author: high5,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-17 04:25:26

VCL es un buen camino a seguir. Tiene una herramienta de diseño de GUI (Embarcadero Rad Studio XE6) desarrollador gui completamente nativo para C++ y Delphi

 2
Author: user3803409,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-03 21:44:03

Dependiendo de cuán estricta sea su definición, puede usar.NET Windows Forms o Windows Presentation Foundation y conectar la lógica desde C++, C++/CLI y C#. Esa no sería una solución pura de C++. De hecho, ni siquiera aconsejaría necesariamente usar C++ en esa situación. El simple uso de C# sería más intuitivo y fácil de mantener. WinForms y WPF tienen diseñadores GUI bastante impresionantes.

 1
Author: Sion Sheevok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-15 23:56:28