wxWidgets mit C++
Für mein aktuelles Projekte habe ich mich für wxWidgets mit C++ als Programmiersprache entschieden um Plattform übergreifende GUIs zu zeichnen. In dieser Artikelserie zeige ich wie man wxWidgets in einem C++ Projekt integriert und einige Funktionen davon verwendet.
wxWidgets mit C++
Wenn man ein Programm mit einem grafischen Benutzerinterface schreibt, dann hat man die Qual der Wahl. Es gibt viele unterschiedliche Frameworks die auf unterschiedlichen Betriebssystemen und Programmiersprachen aufbauen. Einige Beispiele:
- Windows
- WinAPI (C++)
- MFC (C++)
- UWP (C++, C#)
- WinForms (C#)
- WPF (C#)
- Linux
- GTK (C)
- MacOSX
- Cocoa
Die meisten Frameworks sind für eine bestimmte Programmiersprache erstellt worden, bieten aber oft Wrapper für andere Sprachen an. Aus dieser Aufzählung wird aber eines ganz klar, es gibt keine ideale Lösung die auf allen Betriebssystemen funktioniert. Es gibt Bibliotheken die Plattform übergreifend funktionieren. GTK beispielsweise kann man theoretisch auf jedem der genannten Betriebssysteme ausführen. GTK Programme funktionieren überall gleich, sehen aber anders als native Interfaces aus. Besser sind spezialisierte Bibliotheken die das Userinterface mit den nativen Objekten des jeweiligen Betriebssystems anzeigen. Die damit entwickelten Programme sehen zwar in jedem Betriebssystem leicht anders, im jeweiligen Betriebssystem jedoch wie ein natives Programm aus. Die bekanntesten Beispiele für die C++ Entwicklung sind:
- QT
- wxWidgets
ich beschäftige mich in diesem Beitrag mit wxWidgets.
wxWidgets kompilieren
Die beste Methode für ein neues Projekt ist es, die Bibliothek selber aus dem Source zu bauen. Ich lade mir also den wxWidgets Source Code herunter und entpacke diesen auf meinem System.
In den heruntergeladenen Daten findet man unter anderem auch Projektdateien für Visual Studio. Ich öffne die entsprechende wx_vc16.sln Datei für meine Visual Studio 2019 Version. Keine Angst, es werden auch quasi alle früheren Versionen unterstützt.
Aus dem Menü wählt man danach Erstellen -> Batch erstellen und selektiert alle Konfigurationen. Ein Klick auf „Erstellen“ startet den Job, der nun einige Zeit läuft. Zeit für eine kurze Pause und sich etwas der Bibliothek zu widmen…
Theorie
wxWidgets hat eine sehr umfangreiche Dokumentation. Hat man vor etwas tiefer in die Materie einzutauchen ist man dort gut aufgehoben. Man findet zu jedem Steuerelement die passende Beschreibung der Methoden und die Einordnung in der Klassenhierarchie. Nach einer Einarbeitung kann man allein dadurch sehr gut identifizieren was das Steuerelement können soll und wie man dies implementiert. Man erkennt ebenfalls sehr schnell, dass wxWidgets nicht nur GUI Elemente beinhaltet. Es werden auch jegliche Funktionalitäten angeboten um mit dem Dateisystem unabhängig vom Betriebssystem zu interagieren. Als Entwickler muss man sich so auch nicht mit Betriebssystem spezifischen Eigenheiten herumschlagen.
Irgendwann sind dann die wxWidgets vom Source Code neu gebaut…
wxWidgets Bibliotheken
Unter dem lib Verzeichnis im Source Code Folder findet man nun die gebauten Bibliotheken im *.dll und *.lib Format (dynamische und statische Bibliotheken) und das sowohl für 32 als auch für 64 Bit.
Damit wir es in den folgenden Projekten mit wxWidgets etwas einfacher haben lohnt es sich eine Umgebungsvariable mit dem Pfad auf die Bibliothek zu erstellen. So müssen wir nicht jedes einzelne Projekt ändern, welches wxWidgets verwendet wenn wir eine neue Version laden. Ich habe mir folgende Umgebungsvariable in Windows 10 angelegt:
Wir sind soweit mit den Vorbereitungen fertig. Im nächsten Teil des Tutorials werden wir diese Bibliotheken verwenden.
Fazit
Im ersten Teil der Artikelserie zu wxWidgets haben wir uns kurz angesehen welche Möglichkeiten man als C++ Entwickler für GUIs hat. Spezifische gibt es viele, Plattform übergreifende wenig gute. wxWidgets ist offenbar eine gute Möglichkeit. In diesem Beitrag habe ich euch zudem noch gezeigt wie einfach man diese Bibliothek selber aus dem Source Code baut. Anders als bei vielen anderen Projekten liegen auch fertige Projekte für alle möglichen Versionen von Visual Studio bereit. Bei mir hat alles ohne ein einziges Problem geklappt (zum ersten Mal überhaupt). In den weiteren Teilen zeige ich euch wie man diese Bibliothek verwendet und in ein bestehendes Projekt einbaut.
Welche Erfahrungen hast du mit C++ GUIs gemacht? Welches kannst du empfehlen?
Teil 1 | Teil 2 | Teil 3| Teil 4