Wie realisiert man eine GUI?
-
Wie realisiert man eine eigene GUI von den Datenstrukturen her, also Eventschleife etc? Kann das wer mal bitte in kurzen Stichpunkten umreißen?
-
Programmieren lernen
Informationen sammeln (google...)
GUI Framework bauen
-
Nach welcher Programmierebene fragst du? Deine Frage liefert zu wenig Information was du willst, um dir eine gute Antwort zu geben.
Du könntest alles meinen, vom Zusammenklicken einiger Fensterelemente in einer IDE, bis hin zum Entwickeln eines eigenen Betriebssystems.
-
Ich habe die Sprache C zur Verfügung und die Position des Mauszeigers sowie welche Tasten gedrückt sind und einen Grafikbereich in dem ich Zeichnen kann. Daraus möchte ich nun eine kleine GUI programmieren. Ich suche also Datenstrukturen und Algorithmen die mir helfen meine Widgets aufzubauen, die Routinen zum Zeichnen von Primitiven sind fertig.
Mir fehlen halt Denkanstöße wie z.B baue eine Ereigniswarteschlange mit Hilfe von Listen dabei zu beachten ist...Ereignisse koppelst du dann am besten an deine Widgets mit...
Also ich will hier keine Code sonder Techniken und Tipps nach denen ich dann weiter googlen kann. Nach man nach GUI Programmierung sucht kommt man nur auf fertige FRameworks nicht aber auf Seiten die erklären wie man selbst eine konzipiert.
Wenn ich noch konrkekter werden soll bitte sagen.
-
Es gibt viele Webseiten, die GUI-Aufbau erklären. Alleine schon, wenn man nach MVC (Model View Control) sucht. Das Problem ist eher, dass sich solche Anleitungen und Codes auf Sprachen wie Java oder C++ beziehen, die im Gegensatz zu C einige OOP-Sprachmittel bereitstellen. Du müsstest allenfalls versuchen, Implementierungen auf C abzubilden (du kannst schliesslich in C auch objektorientiert programmieren, nur musst du mehr selbst machen). Beispielsweise kannst du virtuelle Funktionen mit Funktionszeigern nachbauen.
Es kommt auch sehr drauf an, wie komplex das Ganze sein soll. Gerade bei GUI-Frameworks kannst du beliebig viel Aufwand betreiben, abhängig von der benötigten Funktionalität, Wiederverwendbarkeit und Erweiterbarkeit.
Zu deiner Event-Frage: Du hast doch wahrscheinlich Events vom Betriebssystem. Am besten kapselst du diese in einer eigenen Struktur
Event
. Der grobe Aufbau könnte vielleicht so aussehen:// "Basis"klasse für GUI-Komponenten struct Component { // Zeiger auf konkrete GUI-Komponente // zeigt z.B. auf Button-Objekte void* actualComponent; // Funktionszeiger auf Event-Behandlungs-Funktion // zeigt z.B. auf Button_HandleEvent() void (*eventHandler)(void*, struct Event); }; // Konkrete GUI-Komponentenstruktur ("abgeleitete" Klasse) struct Button { // Button-spezifische Daten }; // Reagiert auf Events im konkreten Fall der Button-Klasse void Button_HandleEvent(Button* this, struct Event event); // Hauptverwaltungsklasse für GUI struct Window { // irgendeine Liste/Array mit Component-Elementen // evtl. was Fertiges aus einer Datenstruktur-Bibliothek struct List components; }; // Funktion, die Events in dein GUI-System einschleust (z.B. // direkte Weiterleitung von OS-Events in einer Hauptschleife) void Window_FireEvent(Window* this, struct Event event) { // für alle Component-Zeiger comp in der Liste components // rufe eventHandler mit Objekt und Event als Argumenten auf. comp->eventHandler(comp->actualComponent, event); }
Aber das ist nur so eine spontane Idee, aber ich hoffe, du kannst dich etwas daran orientieren. Schau doch auch, wie Frameworks wie GTK+ aufgebaut sind.