Avant de débuter une application, si l'on ne cible par un système particulier, il convient de choisir une interface graphique utilisateur et un large choix s'offre au programmeur.
Mais avant toute chose, pour le programmeur lambda, non lié à un environnement particulier, un fait doit être pris en considération: l'avenir de la programmation n'est pas sous Windows (ni aucun autre système), elle est dans les applications Web, fonctionnant sur un serveur, aussi devrait-on utiliser un framework pouvant fonctionner sur les serveurs les plus communs, et donc sur Apache.
On peut aussi parler des mobiles, mais l'on a dans ce cas une fragmentation considérable des environnements, traitée dans l'article Programmation d'un téléphone mobile, dont on ne peut s'affranchir qu'avec HTML 5.
WIMP
Les interface utilisateurs classique sur le bureau sont de type WIMP. C'est l'acronyme de Window, Icon, Menu, Pointing device (Window, Icône, Menu, Pointeur). Le principe a été développé à partir de 1973 par Xerox et popularisé par Apple avec le MacIntosh, puis par Microsoft à partir de Windows 95.
Ce modèle est remis en question par les écrans tactiles.
Liste de boites à outils (toolkits) et plateformes
Les boites à outils contiennent des composants prédéfinis utilisables directement pour créer l'interface d'une application.
APIs de base
Les API de base sont des interfaces au système fournissant des primitives utilisables pour créer une bibliothèque de composants.
Conclusion
On voit que quand un framework offre la possibilité de programmer pour mobiles, on entre dans le cercle des spécialisations, chaque plateforme fonctionnant sous le système d'une marque seule.
Sinon, lorsque l'on programme pour le bureau mais pas spécifiquement pour Windows, Qt semble être le framework le plus complet tout en étant portable. La licence est LGPL.
Reste encore la possibilité d'écrire ses propres composants avec OpenGL ou WebKit si l'on besoin d'une interface très limitée.
Ressources
Net Beans. Pour réaliser des applications Java, PHP, C++. Multi-plateformes.
Eclipse. EDI multi-plateformes et langages, réalisé en Java.