Mehr Anfänger geht wohl nicht...



  • 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 WinApi 😉

    Wegen 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.gif

    Die 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.


  • Mod

    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 😃


  • Mod

    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!


Anmelden zum Antworten