2011-08-05 11 views
17

así que he engañado un poco con WPF un poco recientemente, y tengo que decir que me gusta mucho la idea. Me encanta el framework como un todo, desde la GUI hasta la fontanería.C++ analógica para WPF

Sin embargo, por mucho que me encanta tierras administradas, amo a mi código nativo de igual manera. Así que me pregunto qué tipo de bibliotecas existen para C++ que capturan la esencia de varias partes de WPF. No estoy buscando solución de interoperabilidad, ni quiero soluciones administradas de C++ o C++/CLI, sino soluciones puras de C++.

Ahora, no estoy esperando encontrar una "copia" de WPF para C++ - Yo no esperaría que existir, ni se lo necesite. En cambio, esperaría que diferentes bibliotecas pudieran capturar un subconjunto de los conceptos deseados. Mis intereses particulares son

  1. hardware de gráficos acelerados para widget de base de interfaz gráfica de usuario (a través de DirectX u OpenGL, preferiblemente el último)

  2. lenguaje declarativo para el diseño de interfaz gráfica de usuario (preferiblemente un dialecto XML)

  3. Data vinculante

  4. independencia Resolución (menos importante)

que diga un poco acerca de mi razonamiento, me gustaría poner en práctica tal biblioteca mí mismo, que captura un modelo específico que he comenzado a trabajar a cabo. Estoy en el proceso de encontrar más inspiración y recursos útiles antes de bloquear mi diseño. La biblioteca está pensada para ser multiplataforma, por lo que las referencias a ideas multiplataforma serían geniales, pero no estrictamente necesarias ya que normalmente soy capaz de traducir cosas en soluciones multiplataforma.

Por último, aunque estoy escribiendo una biblioteca de C++, C++ y las ideas sería genial, estoy abierto a las ideas de cualquier idioma nativo.

Gracias de antemano por cualquier ayuda.

Respuesta

10
  1. No hay nada como esto. No multiplataforma en cualquier caso. Direct2D funciona razonablemente bien, pero obviamente es solo para Windows. Y NVIDIA recientemente eliminó esta extensión de "ruta" de OpenGL que es similar en funcionalidad básica, pero es solo NVIDIA (y no está disponible en Mac OSX). El Cairo tiene un back-end OpenGL, pero no tengo idea de lo bueno que es. No puede ser tan bueno si Mozilla abandona El Cairo a favor de D2D en Windows.
  2. Muchos toolkits GUI tienen alguna forma de lenguaje para hacer una GUI. Qt tiene uno que está precompilado en C++.
  3. No es que yo sepa. El enlace de datos requiere alguna forma de reflexión (el enlace de datos al estilo WPF sí lo hace), y C++ no tiene soporte nativo para la reflexión. Por lo tanto, necesitaría implementar algún tipo de reflexión antes de que pueda comenzar a hacer que el enlace de datos al estilo WPF funcione.
  4. Eso viene con el n. ° 1. Más o menos, ya que cualquier renderizador basado en GPU podrá operar con resoluciones arbitrarias.

Me encanta C++, pero sinceramente, este tipo de cosas se implementa mejor para un lenguaje de nivel superior. La falta de soporte de reflexión basado en el lenguaje hará que implementar datos sea un gran lastre. Mientras que, simplemente podría implementar el bajo nivel "renderizar cosas en el área" y la administración básica de ventanas/eventos en C++, luego exponerlo a un lenguaje de scripts donde el enlace de datos y tal trabajo. De esta forma, tiene la velocidad del código nativo donde lo necesita, pero la versatilidad y la reflexión de un lenguaje de scripting para tratar con la GUI y sus datos asociados.

+3

Gracias por la explicación, y agradezco los consejos sobre cuándo/dónde usar C++ en ciertos entornos. Si bien el consejo me parece valioso, una de mis principales áreas de interés es encontrar formas de hacer las cosas en C++ que comúnmente se atribuyen a los lenguajes de nivel superior. Tal vez resulte extraño, difícil o imposible, pero aún así intentaré implementar mis ideas. Ah, y en cuanto al # 4, tienes razón, pero solo mientras la superficie de renderizado tenga el tamaño correcto. ¿Hay alguna herramienta multiplataforma para acceder a la configuración de DPI para calcular el tamaño de las ventanas? –