Mehr Anfänger geht wohl nicht...
-
@Mechanics Also ich komme mit der WinAPi gut zurecht und für 'ne GUI mit einem Menü, ein paar Buttons und Editboxen reicht es auch völlig.
-
Asyl-Dämon schrieb:
@Mechanics Also ich komme mit der WinAPi gut zurecht und für 'ne GUI mit einem Menü, ein paar Buttons und Editboxen reicht es auch völlig.
Machst du das hauptberuflich? Sagt dein Chef, klar, kannst gern paar Tage in etwas reinstecken was der Kollege mit Qt/Gtk in einer Stunde schafft? Oder dann Wochen, wenn es plötzlich etwas anspruchsvoller wird?
-
Nein, nur hobbymäßig
Der Quellcode für das Hauptfenster ist zwar ein etwas größerer Brocken, aber bis auf wenige Details bleibt der ja immer gleich
und eine Ressourcen Datei ist so ziemlich das einfachste was ich bis jetzt programmiert habe.
Klar würde ich für eine anspruchsvolle GUI ein Framework vorziehen, aber ich sage mal "normale" GUIs bekommt man auch mit der WinApi ohne großen Zeitaufwand hin.
-
Die Frage war: Wie man es heute macht. Und da nutzt man sicher GUI Frameworks. Habe damals mit VB angefangen zu programmieren. Das Ende vom Lied war, dass VB haufenweise Code automatisch erzeugt hatte, den ich nicht verstanden habe.
Ich möchte früher oder später (gerne früher) auf solche Tools zurückgreifen - aber dafür möchte vorher zumindest ansatzweise (auf absolute Vollständigkeit lege ich garnicht so viel Wert) verstehen, was da geschieht. Der Computer sollte einem nur Arbeit abnehmen, die man auch selbst versteht. Außerdem kann ich nicht ausschließen, dass sich die Oberfläche in dem Programm später einmal interaktiv ändert. Dann ist es vorbei mit Drag&Drop GUI's.@Dämon: Danke, aber daran liegt es nicht. Ich habe die #ifndef #endif Passagen erst eingefügt, als ich die Definitions aus der Headerdatei rausnehmen musste.
Ich habe gelesen, dass jeder Compiler die RC Dateien mit einem Separaten Compiler übersetzt. Kann es daran liegen?
-
CJens schrieb:
verstehen, was da geschieht. Der Computer sollte einem nur Arbeit abnehmen, die man auch selbst versteht. Außerdem kann ich nicht ausschließen, dass sich die Oberfläche in dem Programm später einmal interaktiv ändert. Dann ist es vorbei mit Drag&Drop GUI's.
Wie gesagt, zum Üben kann man das gern machen. Es schadet sicher nicht, sich etwas mit der WinApi auszukennen. Vor allem, wenn es irgendwelche schwer nachvollziehbaren Probleme gibt, muss man verstehen, was da passiert. Aber so wirklich übertreiben braucht man das auch nicht
Es geht bei GUI Frameworks nicht um Drag&Drop. Das benutze ich tatsächlich so gut wie nie, wir haben keine so trivialen GUIs, die zusammenklicken kann. Die sind alle dynamisch, interaktiv und sehr komplex. Der Punkt ist, dass so ein Framework sehr viel Arbeit abnimmt und viel mehr bietet, als die WinApi. z.B. Layouts. Wenn du das alles von Hand programmierst, musst du auf Größen und Positionsänderungen reagieren und deine Controls entsprechend verschieben. Viel Spass. Brauchbare Frameworks bieten für sowas verschiedene Layouts, die steckst du zusammen (von mir aus im Code) und es passt sich alles "automatisch" an. Das ist schon mal ein sehr grundlegendes und sehr wichtiges Feature. Dann bist du mit der WinApi bei jedem etwas komplexeren Feature ziemlich aufgeschmießen. Versuch mal eine etwas komplexere Baum oder Tabellendarstellung hinzubekommen, das ist nicht sinnvoll möglich, man muss dann gleich alles selber zeichnen. In Qt sind die ItemViews ziemlich flexibel und gut erweiterbar, wir haben in unserem Programm schon sehr komplexe Varianten davon, ich glaub, viel komplexer gehts gar nicht mehr. Dann hast du in den Frameworks sowas wie Stylesheets (bzw. bei GTK Themes). Damit kann man das Aussehen auch sehr flexibel anpassen, geht weit über das hinaus was man mit der WinApi mit vertretbarem Aufwand machen könnte. Oder sowas wie Textverarbeitung. In Qt gibts da auch ein ziemlich mächtiges Framework mit dem QTextDocument und QTextEdit bzw. entsprechenden anderen Klassen und Controls. Kann viel mehr als das RichEdit und ist viel einfacher zu bedienen und für anderes zu verwenden. Wir haben damit z.B. mehrere Quelltexteditoren gebaut (wir haben mehrere eigene Scriptsprachen und es gibt verschiedene Stellen, wo man irgendwas customizen kann), mit Syntaxhighlighting, Code Completion usw. Da ist es vorbei mit der WinApiWegen deinem Problem. Nochmal, hast du versucht, eine Leerzeile am Ende deiner Headerdatei einzufügen?
-
Ich hätte da noch eine Frage. Gibt es solche Tools auch für C?
QT, GTK+ und wxWidgets arbeiten alle mit C++ und es wird jeweils eine Instanz einer von dem Programm bereitgestellten Klasse eingebunden. Ich möchte in meinem Code auf Klassen komplett verzichten.Das Programm soll eine Listbox, einen Treeview, ein Menü und eine Darstellungsfläche für OpenGL (das ist auch in nativem C gehalten) bereitstellen, mehr nicht.
Ich habe mir jetzt mal die oben beschriebenen Tools angesehen - uff, sehr umfangreich.
Gibt es solche Tools denn auch für natives C, also dass einem das Tool den Code für die GUI erstellt?
Wenn es da nichts gibt, dann werde ich diese paar Funktionen auch über WinApi-32 hin bekommen... mit etwas Übung.
Macht man dabei eigentlich für jedes Steuerelement eine eigene Header- und Ressource Datei? Diese Programme werden sehr schnell, sehr unübersichtlich. Sobald man ein paar Schaltflächen hat ist das schon ein relativ langer Code.
Vielen Dank und Gruß,
CJens
-
GTK ist C. Ist allerdings sehr viel Code, den man da schreiben muss, deswegen wurden sogar Sprachen wie Vala erfunden. Für WxWidgets gibts auch C Bindings. Dann gibts sicher auch etwas schlankere GUI Frameworks, die man in C benutzen kann, ganz spontan fallen mir aber keine ein. GUI kann man halt sehr schön objektorientiert machen. In C ist es dann zwar auch objektorientiert, aber aufwändiger, weil die Sprache das nicht direkt unterstützt. Deswegen so lustige Sachen wie das GObject in GTK, und dafür muss man einen Haufen Code schreiben.
p.s. Eine Ressourcendatei pro Programm sollte reichen.
-
Vielen Dank für die Orientierungshilfe. Ich werde mir das mit WinAPI noch ein wenig antun. Wenn es am Ende nicht klappen sollte, schreibe ich die GUI in C#. Das eigentliche Rechenprogramm liegt schon als sequenzielles Programm vor. Dann müssen die sich den Job eben teilen.
Aber vllt bekomme ich ja diese einfache GUI auch so hin. Ihr werdet es sehen, ob ich hier die nächsten Wochen mit weiteren Fragen aufschlage
Vielen Dank nochmal an alle.
Ps.: Objektorientiert und mit Klassen möchte ich nicht arbeiten, da es sich bei dem Programm um ein Berechnungsprogramm handelt, bei dem Performance an oberster Stelle steht. Die GUI soll eigentlich nur die Eingaben übernehmen und das Ergebnis grafisch darstellen, ähnlich wie hier dargestellt:
http://www.ttm.tugraz.at/arno/posprocessor-demo.gifDie Knoten mit den Werten (hoher Wert = rot, niedriger Wert = blau), die Elemente welche die Knoten aufspannen (Dreiecke, Vierecke, etc.) bestimmt mein Programm, das in C bereits vorliegt. Deshalb wollte ich auch bei C bleiben. Es geht wirklich "nurnoch" um die Visualisierung. Das müsste mit OpenGL recht einfach gehen, wenn all diese Daten vorliegen.
-
Ja, sowas müsste man mit der WinApi hinbekommen haben. Außer, dass es eh schon nicht schön ausschaut Und das Fenster sinnvoll zu skalieren könnte problematisch werden. Was machst du mit den Buttons, müssen die dann mitskaliert werden, wenn das Fenster skaliert wird?
Das in C# zu schreiben und nur eine C Funktion aufzurufen wär auch eine Idee. So ein Fenster hättest in C# in paar Minuten zusammengeklickt, dann deine Funktion über P/Invoke aufrufen, bist insgesamt in 10 Minuten fertig. Warum sollte man da ewig mit der WinApi und Ressourcen und was weiß ich was rumkämpfen? Hast es jetzt übrigens hinbekommen?
-
CJens schrieb:
Ps.: Objektorientiert und mit Klassen möchte ich nicht arbeiten, da es sich bei dem Programm um ein Berechnungsprogramm handelt, bei dem Performance an oberster Stelle steht.
In C++ machen OO und Klassen keinen Geschwindigkeitsnachteil, das sagen wir Dir doch schon seit 4 Jahren.
-
Vor allen: Was haben C++ GUI Klassen mit der Geschwindigkeit Deiner Algorithmen zu tun.
Jede Wette: Alle Designfehler, die Du machst haben mehr Einfluß auf den Speed, als der Unterschied zwischen C/C++.
-
@Martin Richter: wenn ich tatsächlich auf deinen MVP Link klicke, kommt eine Ooops nicht gefunden Seite von Microsoft. Netter Versuch
-
Jupp. Die Jungs bei MS haben mal wieder was geändert.
https://mvp.microsoft.com/de-de/mvp/Martin Richter-6949
Hab meine Signatur soeben korrigiert!