2009-12-05 25 views
15

Soy una nueva GUI y toda la programación, y hasta ahora tengo una comprensión general de c y he pasado bastante tiempo escribiendo aplicaciones de consola.Introducción a la programación de la GUI con c

Estoy tratando de aprender GUI pero hasta ahora no he tenido éxito. He intentado aprender wxwidgets (a través de la documentación oficial), gtk (a través de la documentación oficial) y win32 (tutorial de forgers win32) pero todavía no he llegado al final.

Todavía quiero pero no puedo encontrar ningún material bueno. ¿Qué recomendarías como inicio para un principiante?

+1

¿Cuán estricto es el requisito para usar C? ¿Es posible convencerlo para que use C++? –

+0

Cuelgue allí, en comparación con algunos idiomas, escribir GUI en C no es fácil. –

Respuesta

15

Si está estrictamente limitado a C, tiene solo unas pocas opciones. GTK + es probablemente el más fácil para un principiante.

Un lenguaje orientado a objetos como C++ es mucho más adecuado para la programación de GUI. Si desea utilizar C++, recomiendo encarecidamente Qt, principalmente debido a su muy buena documentación, con muy buena tutorials especialmente para principiantes.

+3

-1, dado que la pregunta menciona haber probado gtk, recomendar gtk es redundante sin ofrecer consejos sobre cómo crackear esa nuez. También recomendar cambiar de idioma está al lado del punto. Los lenguajes OO no son más adecuados para la programación de GUI porque OO es solo una práctica de diseño, no una magia que solo está disponible en ciertos idiomas. – mlibby

+0

Realmente. Entonces, ¿cree que C es igualmente adecuado para la programación de GUI? Adelante y programe sus GUI en C, no lo detendré. Entonces, ¿cuál es su recomendación para un principiante que quiere hacer algunos programas de GUI? – hirschhornsalz

+0

Gtk +. Como puedes ver en mi respuesta. No sé por qué sil3nt eligió C (aparentemente en Windows), pero s/he debe tener razones. Creo que la insistencia en un idioma sobre otro es una distracción. Si la elección del idioma es realmente una pregunta abierta en este momento, sugeriría C# como la mejor manera para que un programador de Windows entre en la programación de GUI. – mlibby

0

recomiendo Cimg library que es de código abierto y muy completo en utilizar 2'D interfaz gráfica y la imagen de proceso:

La Biblioteca CImg es una fuente de C++ abierta conjunto de herramientas para el procesamiento de imágenes diseñado con estas propiedades en mente: Utilidad CImg define clases simples y métodos dirigidos a manipulación de imágenes genéricas en su propio código C++: Cargar/guardar varios archivos formatos, acceso valores de píxel, mostrar, cambiar tamaño/rotar/espejo/filtro, dibujar primitivas (texto, caras, curvas, 3D objetos, ...), calcular estadísticas, administrar las interacciones del usuario, y así sucesivamente ... Genericity provided las clases de imagen pueden representar conjuntos de datos de hasta 4 dimensiones de ancho (desde señales escalares 1D hasta volúmenes hiperespectrales 3D ), con plantilla tipos de píxeles. Las colecciones de imágenes y las secuencias también son compatibles. Portabilidad CImg es autónomo y por lo tanto altamente portátil. Es totalmente funciona en diferentes sistemas operativos (Unix, Windows, MacOS X, * BSD) con varios compiladores de C++ (Visual C++, GNU g ++, Intel icc, Borland bcc, ...). Simplicity CImg es liviano. Es hecho de un solo archivo de cabecera CImg.h que se debe incluir en su fuente C++ . Define solo cuatro clases diferentes de . Se puede compilar utilizando un conjunto mínimo de bibliotecas estándar de C++ y sistema . Sin necesidad de exóticas o dependencias complejas. Extensibilidad Aunque no es necesario, CImg puede utilizar las funcionalidades de externos herramientas/bibliotecas como ImageMagick, GraphicsMagick, XMedCon, FFMPEG, libpng, libjpeg, libtiff, Magick ++, Lapack, Junta, OpenEXR o FFTW3. Además, un simple mecanismo de complemento permite a cualquier usuario mejorar directamente las capacidades de la biblioteca según según sus necesidades. Freedom CImg es una biblioteca de código abierto gratuita distribuida bajo CeCILL-C (cerca de GNU LGPL) o CeCILL (compatible con las licencias GNU GPL). Se puede usar en aplicaciones comerciales .

This is document for Cimg.

+0

Votado como muro de texto. Y el código abierto a veces no es la mejor manera de comenzar a leer el código. Puede darle una perspectiva distorsionada de cómo debe ser el software escrito real. – Chad

+0

@Chad Cimg es la biblioteca gráfica más simple que veo. ¿Ya ves la biblioteca de Cimg? – SjB

+1

@chad, y ¿de qué otra manera sugieres aprender cómo debería ser el software escrito? Al menos con código abierto, leer el código es una opción. Leer cualquier código es mejor que solo aventurarse en el vacío y tener que resolverlo todo desde cero o simplemente usando ejemplos triviales de libros y tutoriales. – mlibby

4

me gustaría sugerir que usted debe tratar de aprender algo de programación orientada a objetos correctamente con un lenguaje como C o C++ Objetivo, ya que la programación GUI es difícil. En particular, más aún en C.

Muchos de los conceptos de programación de interfaz gráfica de usuario que gira en torno a saber cómo funcionan los objetos, con todos los widgets de que se componen en cualquier marco de interfaz gráfica de usuario, y cómo interactúan entre sí. También existe el concepto de eventos que envía mensajes de una fuente de entrada a un componente gráfico (o entre dos componentes gráficos).

En resumen: se hace mucho más fácil de leer a través de documentación cuando se sabe lo que los objetos son todos acerca de ... e incluso entonces no es mucho para tomar en

1

La lectura de un libro sólo va a llegar tan lejos. . Para llevarlo al siguiente nivel, solo necesita experimentar con lo que la API puede hacer. Aunque puede obtener todo el nivel de la API de Win32 para su GUI, pero si acaba de comenzar simplemente se centran en probar diferentes técnicas.

Pronto descubrirá qué funciona y qué no funciona.

Si yo recomendaría un libro, recomendaría un libro no técnico.

Design Of Everyday Things

siguiente es una entrada de video, en aproximadamente visión más psicológica de diseño de una interfaz gráfica de usuario y cómo hacer que sus usuarios y feliz.

Business of software - Joel Spolsky

última, este libro le ayudará a entender que, cuando haces aplicaciones de diseño que la gente va a ver sus decisiones y elecciones asthetic a través de sus propios valores culturales. Entonces, es importante elegir un tema de diseño astético para su aplicación y atenerse a él.

The Culture Code

1

Lo que hay que saber es que la GUI no está integrado en C (Como sin duda ya descubrió), pero está atornillado en medio de varias bibliotecas. wxWindows, qt, gtk y, por supuesto, el VCL son jugadores importantes. Si bien todos hacen cosas similares, todos son diferentes en detalle.

Algo importante que debe saber es que si fuera a programar en C++, tendría acceso a algunas envolturas orientadas a objetos para estas y otras bibliotecas que podrían hacer su vida un poco más fácil. "simple" C a veces se considera como "vieja escuela" en estos días, y el soporte no es tan "animado", aunque las bibliotecas GUI existentes son excelentes por sí mismas.

Lo que yo recomiendo es que busque en la red descripciones y comparaciones de bibliotecas de GUI y evalúe sus hallazgos según sus necesidades personales. ¿Tus cosas solo se ejecutarán en Windows, o te gustaría que se multipliquen? ¿Es la licencia un problema? ¿Quieres algo pequeño y simple (y tal vez no tan sexy) o quieres que la GUI finalice todas las GUI?

Al elegir un ganador, trabaje a través de tutoriales en línea o ejemplos.Si se las arregla para obtener lo esencial y puede soportar programar en el estilo requerido, agarre un libro de árbol muerto para aprenderlo en profundidad y entenderlo en detalle.

2

Si desea aprender programación de GUI en Windows en C, la buena noticia es que la API nativa se basa en C. La mala noticia es que la API nativa no es exactamente un modelo de claridad y coherencia. Es mucho más fácil comenzar con un marco OO construido sobre esa API.

Dicho esto, si aún desea aprender la programación de Windows GUI en C, su mejor opción es Programming Windows de Petzold. Le enseñará la programación de Windows en general, incluyendo todas las cosas de la GUI, usando la API nativa.

5

No recomendaría intentar hacer GUI con C. No es tan cómodo hacerlo.

Pero si realmente quieres hacerlo. Aquí hay un tutorial bastante bueno en Windows API.

También puede usar una biblioteca como Allegro, está diseñada para juegos, pero puede ser igualmente útil en programas.

Pero la forma en que sugeriría es, primero aprender los principios básicos de la GUI y la programación de aplicaciones (eso significa máquina de estados) con un lenguaje simple (cualquier simple, personalmente sugerirá Lua con la plataforma Löve2D). Y luego use el conocimiento que obtuvo en C. La máquina de estado y el flujo de eventos serán más difíciles de comprender si tiene que lidiar con la recolección de basura y los indicadores ... (aún es posible aprender).

+0

-1 porque la pregunta no era si la GUI debería hacerse en C, sino cómo comenzar. Hay una gran cantidad de software fino escrito en C usando Gtk + que se ejecuta en plataformas cruzadas. – mlibby

+1

+1 La pregunta incluye "¿Qué recomendarías como inicio para un principiante?" Por lo tanto, es un buen consejo incluir una advertencia además de dar una respuesta válida al resto de la pregunta. – Dipstick

+0

@mcl: Sé que hay una gran cantidad de software escrito GUI en C. También hay aplicaciones GUI escritas en ASM. Pero no creo que esa sea la mejor manera de tratar de aprender GUI. Creo que para los principiantes aprender GUI primero con algo como Lua (como la plataforma Löve2D) sería más beneficioso, ya que no tendrían que preocuparse por gc, punteros y otras cosas similares. Cuando conoces el modelo básico de eventos/estados para las GUI, es más fácil seguir adelante. – Egon

2

Voy a recomendar ir volver a gtk + y probarlo más. ¿Por qué?

Porque hay una gran cantidad de software de código abierto disponible tanto para Linux como para Windows escrito en C usando las bibliotecas gtk + para la GUI. Desde aplicaciones grandes como GIMP y GnuCash, hasta herramientas más pequeñas, el código fuente está disponible y se puede leer para descubrir cómo logran ciertas hazañas. Si es el mejor ejemplo de cómo lograr algo es otra cuestión, pero al menos tiene la ventaja de ver cómo funciona el software.

Además, gtk + incluye glib, que es una herramienta útil para tener disponible para manejar estructuras de datos y algoritmos comunes. Entonces, en lugar de perder el tiempo implementando listas enlazadas y cosas así, puede usar las que están en la biblioteca y su tiempo de codificación lo dedica a resolver sus propios rompecabezas.

La documentación de Gtk + no es perfecta, pero es decente. También hay un mailing list para desarrolladores de aplicaciones.

+1

junto con GTK +, se puede utilizar la herramienta de diseño de interfaz Glade3. Puede construir su formulario de GUI simplemente arrastrando y soltando los widgets. Glade genera un archivo .glade que se puede importar en su código C. Para obtener más información, vaya a http://glade.gnome.org/ – atv

1

+1 para GTK. Si está obligado a usar C, ya sea a través de su propia elección o de los requisitos del proyecto, le será difícil hacerlo mejor que GTK +. QT es principalmente C++, por lo que si C++ está bien, esa es una opción. Pero los documentos para GTK + no son tan malos como los proyectos de código abierto, y hay un montón de código de ejemplo para analizar.

Si tiene la opción de cambiar de idioma, hay otras opciones Cocoa es un excelente entorno de programación GUI en la Mac (nunca he probado Cocoa para Windows, pero he oído que es posible.) y Objective-C se presta bien a la programación de GUI.

1

Le sugiero que también estudie en la programación impulsada por eventos. En muchos programas de GUI, el programa principal espera a que ocurra un evento, como un clic del mouse, luego procesa el evento. La Programación de Conducción de Eventos es muy diferente a la programación de Ejecución Secuencial.

Otros temas a estudiar son la programación de múltiples hilos y tareas múltiples. Muchos objetos de GUI (widgets), como un botón, pasan mensajes a otros objetos; o transmitido a todos los oyentes. La transmisión de mensajes es un proceso común en la programación de múltiples hilos y tareas múltiples.

Cuestiones relacionadas