Essencialmente, o sistema de janelas de um sistema operacional expõe algumas chamadas de API que você pode executar para executar tarefas como criar uma janela ou colocar um botão na janela. Basicamente, você obtém um conjunto de arquivos de cabeçalho e pode chamar funções nessas bibliotecas importadas, como faria com stdlib e printf
.
Cada sistema operacional vem com seu próprio kit de ferramentas da GUI, conjunto de arquivos de cabeçalho e chamadas de API, e sua própria maneira de fazer as coisas. Também existem kits de ferramentas de plataforma cruzada, como GTK , Qt e wxWidgets, que ajudam a criar programas que funcionam em qualquer lugar. Eles conseguem isso tendo as mesmas chamadas de API em cada plataforma, mas uma implementação diferente para as funções de API que chamam as chamadas de API do SO nativo.
Uma coisa que todos eles têm em comum, que será diferente de um programa CLI, é algo chamado loop de evento. A idéia básica é um pouco complicada e difícil de compactar, mas, em essência, significa que não há muita coisa acontecendo na sua classe principal / função principal, exceto:
- verifique a fila de eventos se houver novos eventos
- se houver, envie esses eventos para manipuladores apropriados
- quando terminar, retorne o controle ao sistema operacional (geralmente com algum tipo de chamada de função "suspensão" ou "seleção" ou "transferência" especial)
- então a função yield retornará quando o sistema operacional estiver concluído e você terá outra ação ao redor do loop.
Existem muitos recursos sobre programação baseada em eventos. Se você tem alguma experiência com JavaScript, é a mesma ideia básica, exceto que você, o scripter, não tem acesso ou controle sobre o próprio loop de eventos ou sobre quais eventos existem, seu único trabalho é escrever e registrar manipuladores.
Você deve ter em mente que a programação da GUI é incrivelmente complicada e difícil, em geral. Se você tiver a opção, é realmente muito mais fácil integrar um servidor da Web incorporado ao seu programa e ter uma interface baseada em HTML / Web. A única exceção que encontrei são os tutoriais do construtor de interfaces Cocoa + Xcode + da Apple, que o tornam facilmente o ambiente mais acessível para pessoas novas na programação de GUI que eu já vi.