Esencialmente, el sistema de ventanas de un sistema operativo expone algunas llamadas API que puede realizar para realizar trabajos como crear una ventana o colocar un botón en la ventana. Básicamente, obtienes un conjunto de archivos de encabezado y puedes llamar a funciones en esas bibliotecas importadas, tal como lo harías con stdlib y printf
.
Cada sistema operativo viene con su propio kit de herramientas GUI, conjunto de archivos de encabezado y llamadas API, y su propia forma de hacer las cosas. También hay kits de herramientas multiplataforma como GTK , Qt y wxWidgets que lo ayudan a crear programas que funcionan en cualquier lugar. Logran esto al tener las mismas llamadas API en cada plataforma, pero una implementación diferente para esas funciones API que llaman a las llamadas API nativas del sistema operativo.
Una cosa que todos tendrán en común, que será diferente de un programa CLI, es algo llamado un bucle de eventos. La idea básica allí es algo complicada y difícil de comprimir, pero en esencia significa que no hay mucho en tu clase principal / función principal, excepto:
- verifique la cola de eventos si hay nuevos eventos
- si es así, envíe esos eventos a los controladores apropiados
- cuando haya terminado, regrese el control al sistema operativo (generalmente con algún tipo de llamada de función especial "suspensión" o "selección" o "ceder")
- entonces la función de rendimiento volverá cuando el sistema operativo haya terminado, y tenga otra vuelta al circuito.
Hay muchos recursos sobre programación basada en eventos. Si tiene alguna experiencia con JavaScript, es la misma idea básica, excepto que usted, el programador no tiene acceso o control sobre el ciclo de eventos en sí, o qué eventos hay, su único trabajo es escribir y registrar controladores.
Debe tener en cuenta que la programación de la GUI es increíblemente complicada y difícil, en general. Si tiene la opción, en realidad es mucho más fácil integrar un servidor web incorporado en su programa y tener una interfaz basada en HTML / web. La única excepción que he encontrado es Cocoa + Xcode + Apple Builder + tutoriales de Apple que lo hacen fácilmente el entorno más accesible para las personas nuevas en la programación GUI que he visto.