Ich hab' mir gerade überlegt, daß man eigentlich doch mal die beliebteren GUI-Toolkits miteinander vergleichen könnte, indem man ein kleines Programm, beispielsweise einen Taschenrechner, baut und sich dann ansieht, wo das Programm überall läuft, wie sehr es der Vorgabe ähnelt und wie der Code aussieht. Einen Gewinner gibt es nicht, aber man lernt mal verschiedene Toolkits auf eine Weise kennen, wo man sie gut vergleichen kann.
Idealerweise sollte das gesamte Programm in menschenlesbarem Quelltext geschrieben sein, damit man vergleichen kann; Umgebungen wie Visual Basic oder Interface Builder wären also suboptimal.
Vom Layout her sollte der Rechner wohl erstmal in etwa so aussehen: [link]
Einfach ein Imitat eines einfachen Taschenrechners. Nicht zu kompliziert aber auch nicht völlig trivial. Falls wir komplexere Layout wollen können wir das später noch tun.
Mich würden erst mal GTK, Qt, wxWidgets, GDI(+), Cocoa/Obj-C, Carbon/C++, Swing und SWT interessieren, vielleicht auch WinForms und FLTK... Fällt sonst noch wem ein interessantes Toolkit ein? (Und nein, ich mmeine nicht, daß ich jetzt erwarte, Beispiele für alle zu sehen; sie interessieren mich einfach im Vergleich.)
CEGUI/C++
Die GUI wird innerhalb eines direct3d/opengl viewports gerendert und daher gerne für 3D-Programme verwendet.
Werd Morgen die GUI für den Taschenrechner schreiben. Wie CEGUI im vergleich zu anderen GUIs ist hat mich schon länger interessiert.
vllt. setze ich mich demnaechst mal ran und mach das mit GTK.
btw, ist die Sprache fuer dich wichtig? Ein Toolkit sollte zwar in verschiedenen Sprachen eine im Grossen und Ganzen gleiche API haben, aber es gibt halt z.B. doch ein paar minimale Unterschiede zwischen GTK (mit C) und PyGTK (wobei das primaer irgendwelche Komfort-Funktionen von Python sind).
Okay, ich hab da mal was haessliches hingerotzt. Der Code ist stellenweise nicht sonderlich schoen, aber er funktioniert.
Ich kompiliere das mit gcc 4.1 und GTK 2.8 auf Gentoo, da laeuft's (Der Sourcecode ist UTF-8-encodet). Ihr solltet den Output von pkg-config --cflags --libs gtk+-2.0 an euren Kompilier-Befehl anhaengen, das erspart manuelles zusammensuchen von Libs und Include-Directories.
Oh, und wer's noch nicht gemerkt hat: das Ding ist in C geschrieben und benutzt GTK als Toolkit.
Ach ja, wundert euch nicht, wenn die Anzeige der Nachkommastellen etwas seltsam ist und das Ding nur mit der Praezision einer double rechnen kann. An der Stelle war ich faul, schliesslich geht's primaer ums Toolkit und nicht um den Rechner.
#2
Ich poste mal nicht den gesamten Code, sondern nur die CEGUI-Relevanten Stellen.
Die XML-Datei mit dem GUI-Layout. Die GUI in C++ zu schreiben ist zwar möglich aber meistens nicht Sinnvoll.
Erstellen des CEGUI Renderers und Systems, laden des Skins, zuweisen eines Standard Mouse Cursor Bildes und laden des GUI-Layouts aus der XML-Datei. In *.scheme können font, lookNFeels und imageset festgelegt werden. In imagesets wird die Position von GUI-Elementen ,bzw. Einzelteilen aus denen sich die Elemente zusammensetzen, in einer Bildatei angegeben. In *.looknfeel wird festgelegt, aus welchen Bildern ein bestimmtes GUI-Element besteht und wo sie sich befinden.
Allen PushButtons wird dieselbe Callback Funktion zugewiesen:
Die Callbackfunktion. Kann man einen Taschenrechner schlimmer programmieren?