In sostanza, il sistema di finestre di un sistema operativo espone alcune chiamate API che è possibile eseguire per fare lavori come creare una finestra o mettere un pulsante sulla finestra. Fondamentalmente, ottieni una suite di file di intestazione e puoi chiamare funzioni in quelle librerie importate, proprio come faresti con stdlib e printf
.
Ogni sistema operativo viene fornito con il proprio toolkit GUI, una suite di file di intestazione e chiamate API e il proprio modo di fare le cose. Esistono anche toolkit multipiattaforma come GTK , Qt e wxWidgets che ti aiutano a costruire programmi che funzionano ovunque. Raggiungono questo obiettivo avendo le stesse chiamate API su ciascuna piattaforma, ma un'implementazione diversa per quelle funzioni API che richiamano le chiamate API del sistema operativo nativo.
Una cosa che avranno tutti in comune, che sarà diversa da un programma CLI, è qualcosa chiamata loop di eventi. L'idea di base è in qualche modo complicata e difficile da comprimere, ma in sostanza significa che non sta succedendo molto nella tua classe principale / funzione principale, tranne:
- controlla la coda degli eventi se ci sono nuovi eventi
- se esiste, inviare tali eventi ai gestori appropriati
- quando hai finito, restituisci il controllo al sistema operativo (di solito con una sorta di speciale funzione "sleep" o "select" o "yield")
- quindi la funzione di rendimento tornerà quando il sistema operativo è terminato, e hai un altro giro intorno al ciclo.
Ci sono molte risorse sulla programmazione basata su eventi. Se hai esperienza con JavaScript, è la stessa idea di base, tranne per il fatto che tu, lo scripter, non hai accesso o controllo sul ciclo degli eventi stesso o su quali eventi ci sono, il tuo unico lavoro è scrivere e registrare gestori.
Dovresti tenere presente che la programmazione della GUI è incredibilmente complicata e difficile, in generale. Se hai l'opzione, in realtà è molto più semplice integrare un server web incorporato nel tuo programma e avere un'interfaccia basata su HTML / web. L'unica eccezione che ho riscontrato è Cocoa + Xcode + builder di interfacce + tutorial di Apple che lo rendono facilmente l'ambiente più accessibile per le persone nuove alla programmazione della GUI che ho visto.