Gute GUI Programmierung
-
Also ich verwende momentan folgenden Ansatz und bin sehr zufrieden:
http://www.codeproject.com/managedcpp/OpenGLViewWinForms.asp
Nutze für den GUI-Anteil WindowsForms (C++/CLI) und für den Rest normales C++.
-
Am "einfachsten" geht das mit Sicherheit mit WinForms und Managed DX.
-
Listing schrieb:
-Delphi: ... Dort ist die Syntax fast 1 zu 1 wie C++ (nur andere Syntax)
Listing schrieb:
Opengl ist veraltet.
WTF?
Listing schrieb:
Ich brauche jetzt die optimale Lösung
Die gibts nicht.
Ansonsten würde ich sagen: nimm OpenGL.
Für den Rest deines Programmes bieten sich die folgenden Optionen mehr oder weniger an:
- C/WinAPI
- C++Builder oder Delphi mit VCL
- C++/irgendein GUI-Toolkit
- C# (wenns sein muß, auch C++/CLI)/WinForms
- JavaEine Empfehlung gebe ich hierfür nicht ab, denn die gibt jeder anders; sie würde dir nichts helfen. Schau dir die Optionen an und nimm von denen, die deine Bedürftnisse erfüllen, das, womit du am effektivsten arbeiten kannst.
-
Tipp schrieb:
Also für dich würde ich HTML empfehlen
Hahaha
WTF?
Dann hab ich was falsch mitgekriegt, ich merke nur, dass immer weniger Leute OpenGl benutzen und DirectX die Oberhand gewonnen hat
Zeig mir ein kleines Programm, das dieses Phänomen demonstriert und dann sag ich Dir, was Du falsch machst.
Ok bittesehr:
//private Variable der Klasse private Graphics2D g; //Graphics2D von drawPane holen protected void init2DGraphics() { g = (Graphics2D)drawPane.getGraphics(); //Only into drawing part g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g.setComposite(AlphaComposite.getInstance(3, 1.0F)); } private void drawK(int x, int y) //Kugel zeichnen { g.setPaint(Color.red); g.drawOval(x-5, y-5, 10, 10); g.fillOval(x-5, y-5, 10, 10); } private void paintButtonActionPerformed(java.awt.event.ActionEvent evt) { int posX = 0; int posY = 50; while(posX < 500) { g.setPaint(drawPane.getBackground()); //Alles löschen g.fillRect(1, 1, drawPane.getWidth()-2, drawPane.getHeight()-2); drawK(posX,posY); ++posX; } }
Beim Mausklick flackert es, ich muss das leider so löschen, weil der Rand sonst auch weg ist.
Auch ein Sleep hilft nicht viel. Ich erinnere mich das auch mal mit repaint() oder so ähnlich gemacht zu haben, leider mit dem gleichen Ergebnis.Wie wär's mit c# und .net?
Nimm Python und ein GUI toolkit oder eine Grafikengine. Damit erzielste ergebnisse bereits nach 10 minuten.(3D szene etc)
Noch eine Neue Sprache??? 4 sollten doch erstmal reichen finde ich
Am "einfachsten" geht das mit Sicherheit mit WinForms und Managed DX.
Welche Sprache ist das?
Quatsch! Guck doch mal ins GUI-Forum!
Kannst du mir da was gutes ans Herz legen?
Vielen Dank schonmal für eure hilfreichen Kommentare.
Anscheinend ist Opengl doch nicht so schlecht!?mfG
-
Listing schrieb:
sonstige Lösungen sind kostenpflichtig.
Absolut falsch. Es gibt zig gute GUI-Libraries, die gratis sind. Schau mal ins GUI-Forum (bzw. dessen FAQ).
Listing schrieb:
Dann hab ich was falsch mitgekriegt, ich merke nur, dass immer weniger Leute OpenGl benutzen und DirectX die Oberhand gewonnen hat
Hast du absolut falsch mitgekriegt. Also aerger dich nicht wenn die Leute dir HTML vorschlagen, aber du hast eben durch solche Aussagen ("alle guten GUI Libs sind kostenpflichtig", "OpenGL ist veraltert") den Eindruck erweckt, relativ unerfahren zu sein. (Ich hoff du kriegst das jetzt nicht in den falschen Hals
).
Listing schrieb:
Zeig mir ein kleines Programm, das dieses Phänomen demonstriert und dann sag ich Dir, was Du falsch machst.
Ok bittesehr:
[... snip ...]
Beim Mausklick flackert es, ich muss das leider so löschen, weil der Rand sonst auch weg ist.
Auch ein Sleep hilft nicht viel. Ich erinnere mich das auch mal mit repaint() oder so ähnlich gemacht zu haben, leider mit dem gleichen Ergebnis.Zeichnen solltest du auch nur in der Paint-Methode (IIRC, schon lange her), und nicht im Event-Handler!
Listing schrieb:
Wie wär's mit c# und .net?
Nimm Python und ein GUI toolkit oder eine Grafikengine. Damit erzielste ergebnisse bereits nach 10 minuten.(3D szene etc)
Noch eine Neue Sprache??? 4 sollten doch erstmal reichen finde ich
Du scheinst weder mit C++ noch Delphi oder Java zufrieden zu sein, also was bleibt uns denn uebrig
Listing schrieb:
Am "einfachsten" geht das mit Sicherheit mit WinForms und Managed DX.
Welche Sprache ist das?
.NET-Sprachen, also entweder C#, C++/CLI oder VB.NET. Wobei das alles IMHO absolut nicht noetig ist, du kommst mit C++ sicher gleichschnell ans Ziel, wenn du eine ordentliche Lib gefunden hast.
Listing schrieb:
Quatsch! Guck doch mal ins GUI-Forum!
Kannst du mir da was gutes ans Herz legen?
Vielen Dank schonmal für eure hilfreichen Kommentare.
Anscheinend ist Opengl doch nicht so schlecht!?Schau doch einfach ins GUI-Forum!!!!!111einhundertelf Die Frage nach "der einen GUI-Lib, sie alle zu binden" wurde bereits zwölfundfünzigmal zu Tode diskutiert. Und nein, OpenGL ist nicht so schlecht.
-
Wenn du für das mit der Paint-Methode ein Beispiel hast bin ich 100%ig zufrieden.
Denn ich möchte das "Drawing" ja über den Knopfdruck auslösen und beeinflussen. Und die Paint methode meines "OverlayedJPane" hab ich ja nicht, die ist ja in der Klasse des Objekts auf das ich keinen Zugriff hab'Und wenn ich den Eindruck erwecke dass ich noch relativ unerfahren bin, stimmt das. "Ich weiß dass ich nichts weiß
:D"
Vielen Dank schonmal für die Aufklärung.
mfG
-
Blue-Tiger schrieb:
Listing schrieb:
sonstige Lösungen sind kostenpflichtig.
Absolut falsch. Es gibt zig gute GUI-Libraries, die gratis sind. Schau mal ins GUI-Forum (bzw. dessen FAQ).
(Im Gegensatz zur MFC, die kostenpflichtig ist!)
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Listing schrieb:
Wenn du für das mit der Paint-Methode ein Beispiel hast bin ich 100%ig zufrieden.
Denn ich möchte das "Drawing" ja über den Knopfdruck auslösen und beeinflussen. Und die Paint methode meines "OverlayedJPane" hab ich ja nicht, die ist ja in der Klasse des Objekts auf das ich keinen Zugriff hab'Uhm, also ich hab schon seit Ewigkeiten kein Java mehr geschrieben, aber irgendwer wird mich sicher verbessern wenn ich was falsch mache:
public class MyCanvas extends JComponent // oder von mir aus leit von JFrame ab oder was auch immer { // diese Funktion wird VON JAVA SELBER AUFGERUFEN, sobald du das Fenster aus irgend einem Grund neu zeichnen musst // (das Graphics - Objekt kann Problemlos in ein Graphics2D-Objekt gecastet werden, wenn du das brauchst public void paint(Graphics g) { // ... hier kommt dein Gezeichne rein, z. B. for (int i = 0; i < obj.length; ++i) obj[i].paintYourself(g); } // der Eventhandler private void paintButtonActionPerformed(java.awt.event.ActionEvent evt) { // die Funktion repaint() sorgt dafuer, dass Java den Fenster-inhalt leert und RUFT DANN PAINT AUF repaint(); } }
EDIT: sollte dein Zeichnen sehr, sehr lange dauern, kanns evtl.von Vorteil sein, wenn du dir DoubleBuffering bastelst (oder vielleicht kann Swing das jetzt von allein, ich habs mir seinerzeit selber programmiert).
-
Vielen Dank, jetzt ist alles geklärt
-
Falls es noch schneller laufen muss. Es gibt eine Klasse die ein Image als zweidimensionales Array bahandelt. Damit kannst du Animation sorgat realisieren.
-
Wenn man bei deinem Java Beispiel DoubleBuffering nicht einschalten kann, dann zeichne alles in ein Bild (dort löschen usw.) und am schluss wird nur das bild in der paint methode gezeichnet (ohne löschen). das hat bei applets funktioniert, ist aber schon ne weile her, vlt gehts jetzt auch einfacher.
-
WinApi ist dir zu kompliziert oder gefällt dir nicht ?
hmm stimmt, aber nur wenn man vorhat sehr komplexe sachen zu Machen, Menüleisten, ownerdraw ect aber ansonsten finde ich das quasi optimal.
Die komplexen Steuerelemente mit ownerdraw und dem Krämpel sind in C# und .Net sehr einfach -> willst du nicht lernen obwohl es nur ein kleiner Schritt von C++ bis C# ist
DirectX gefällt mir persönlich sehr gut, verstehe nicht wo da das Problem liegt
Fazit:
lern die Sachen richtig, mach Basic oder lass das Programmieren sein !