1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Von der Konsolenanwendung zur grafischen Oberfläche

Dieses Thema im Forum "C/C++" wurde erstellt von Fussballgott19, 7. September 2011.

  1. Fussballgott19

    Fussballgott19 Grünschnabel

    Hallo,

    ich habe ein fertiges Tool als Konsolenanwendung unter Visual Studio 2010 programmiert.Nun möchte ich dieses so abändern, dass alles über eine grafische Oberfläche steuerbar ist. Wie gehe ich das am besten an? Welches ist der einfachte Weg? Bei welchem Weg muss ich möglichst wenig vom Code ändern?

    Grüße und Danke
  2. SE

    SE Gast

    Das wohl einfachste Schema wäre wenn dein "Tool" so programmiert hast das du einfach eine GUI drüber legen kannst. Wenn du dein Tool aber so geschrieben hast das es quasi die Console verlangt wirst du um eine größere Änderung des Codes nicht herum kommen. In der Regel trennt man Logik und Darstellung um genau sowas zu ermöglichen. Bei diesem Konzept wird dann einfach der Teil der für die Consolen-Darstellung verantwortlich ist gegen die GUI ausgetauscht ... aber ohne Source können wir dir nur Konzepte vorschlagen ... dierekt helfen jedoch nicht.
  3. Fussballgott19

    Fussballgott19 Grünschnabel

    Naja so richtig getrennt habe ich es nicht, aber ich denke das es ein mittelding ist von dem was du beschreibts. Ich geben euch mal ein bissl Code und hoffe auf Hilfe.
    Code (Text):
    1.  
    2. //Eine Funktion die Parameter aus einer INI ausliest
    3. void getprogparameter(string inipath, string *startparameter)
    4. {
    5.     const unsigned long puffer_size = 255;
    6.     char puffer[puffer_size];
    7.     //char ini[] = "c:/Project_OGDF/CPL/Release/config.ini";
    8.     GetPrivateProfileSection( "Parameter", puffer, 1024, inipath.c_str());
    9.  
    Dieses möchte ich nun beim Programmstart aufrufen und die Parameter in Textboxen ausgeben. Ich weiß das man bei Form Load was tun kann. Aber es ist doch nicht sinnvoll alles in der .h Datei zu programmieren. Muss ich meine Konsolenanwendug einfach nur eine Windowsform hinzufügen?

    Danke
  4. sheel

    sheel Mod # I love Asm Moderator

    Hi

    1) Ohne eine Komplettübersicht des Codes wird es schwer zu helfen.

    2) Winforms sind NICHT C++!

    3) Ini-Dateien sind unabhängig von Konsole/GUI. Also ist das ein ganz anderes "Problem".

    4) Mit "einfach Projekt hinzufügen" ist gar nichts geholfen.
  5. Fussballgott19

    Fussballgott19 Grünschnabel

    Also folgendes:

    Code (Text):
    1.  
    2. void getprogparameter(string inipath, string *startparameter)
    3. {
    4.     const unsigned long puffer_size = 255;
    5.     char puffer[puffer_size];
    6.     //char ini[] = "c:/Project_OGDF/CPL/Release/config.ini";
    7.     GetPrivateProfileSection( "Parameter", puffer, 1024, inipath.c_str());
    8.    
    9.     char* key = puffer;
    10.     string strkey;
    11.     int i = 0, pos = 0;
    12.     while (*key)
    13.     {
    14.         strkey = key;
    15.         pos = strkey.find('=');
    16.         strkey = strkey.substr(pos+1);
    17.         startparameter[i++] = strkey;
    18.         key += strlen(key) + 1;
    19.     }
    20. }
    21.  
    22. int main(int argc, char* argv[]) {
    23. std::string startparameter[5];
    24. std::string inipath("");
    25. inipath = "C:/temp/test.ini"
    26. getprogparameter(inipath, *startparameter)
    27. //Textbox1 = startparameter[0]; dass soll passieren******
    28. //Textbox2= startparameter[1];
    29. return 0;
    30. }
    31.  
    So nun möchte ich eine Windows Form haben und dort drin zwei Textboxen, diese sollen beim Start der Anwendung die Werte startparameter[0] und startparameter[1] beinhalten. Wie gestalte ich das am besten?
    Muss ich einfach nur eine Form zum Projekt hinzufügen?

    Grüße
  6. sheel

    sheel Mod # I love Asm Moderator

    Jetzt lies das bitte nocheinmal und denk nach, was es bedeutet.

    Generell: MVC-Pattern. Gezielt kann man so nicht sagen, ob es schon passt oder nicht.
    Zuletzt bearbeitet: 7. September 2011
  7. Fussballgott19

    Fussballgott19 Grünschnabel

    Deine Antworten kannste dir echt sparen!
    Du beantwortest überhaupt keine Fragen! Anstelle immer nur irgendwas als falsch darzustellen, wäre ja mal ein alternitiver Hinweis nicht schlecht! Hab ja nun extra den Code gepostet und auf Hilfe gehofft, aber scheinbar ...
    'Mit der INI hat es ja auch nichts zu tun******'
  8. SE

    SE Gast

    @TO
    Bleib mal bitte auf dem Teppich ...
    Bevor du hier einen Flamewar startest versuche bitte erstmal zu überlegen WARUM sheel dich darauf hingwiesen hat seinen Post erneut zu lesen ... nämlich aus dem Grund das du ihn entweder nicht richtig / nicht vollständig gelesen oder verstanden hast.

    Um dir die Punkte noch mal etwas näher zu bringen :

    1) GESAMTER Code
    Du hast gefragt wie du am einfachsten über dein Tool eine GUI legen kannst. Darauf hin haben wir dir beide versucht klar zu machen das das davon abhängt wie du dein Tool implementiert hast. Die einfachste Art und Weise ist das MVC-Modell bei denen Logik und "GUI" getrennt sind. Im Falle einer Consolenanwendung heißt das nichts weiter als das die Verarbeitung der Console *I/O* komplett unabhängig von der Logik und damit einfach gegen eine GUI ersetzbar ist. Das ist bei dir offenbar NICHT der Fall wesshalb wir deinen gesamten Source brauchen um dir richtig helfen zu können.
    Aber anstatt du versuchst das zu begreifen kommst du uns mit der Antwort das du irgendwo noch eine INI-Datei lädst. sheel bemerkte *um dem vorzugreifen* mit Punkt 3) lediglich das das völlig unabhängig von der Umsetzung der GUI ist , oder besser : sein sollte. Denn wenn das nicht so ist , also das I/O der Console von dieser INI abhängig ist solltest du dir Gedanken über den grundlegenden konzeptionellen Aufbau deines "Tools" machen.

    2) WinForms != C++
    Ich kenne mich in der Welt von C nicht aus ... aber selbst wenn man sich nur mal durch unsere Unterforen klickt kann man lesen das WinForms eine Form von C# DotNET ist ... *zumindest wenn ich das richtig verstanden habe* ... du redest aber von C++ und postest deinen Thread im C/C++ - Forum. Folglich , in Abhängigkeit das ich richtig liege , bist du hier schlicht im falschen Forum gelandet.

    4) "etwas zum Projekt hinzufügen"
    Ich denke auch das dir nicht damit geholfen ist einfach irgendwas in dein Projekt zu integrieren da das zugrunde liegende Konzept scheinbar nicht für diesen "Umbau" ausgelegt ist. Mit anderen Worten : auch wenn es viel Copy&Paste ist wirst du wohl um ein teilweises neu-Schreiben deines Tools auf MVC-Basis nicht herum kommen.

    Ich bitte dich hiermit in aller Höflichkeit : unterlasse bitte diese aggressive Haltung uns , die dir helfen wollen , gegenüber. Ich selbst habe keinerlei Erfahrung in dieser Sprache , erkenne jedoch dank meiner langjährigen Programmiererfahrung das du hier einige grundlegende Konzepte missverstanden und falsch angewendet hast um "mal eben eine GUI drüber zu werfen".
    Wie ich bereits in meinem ersten Post erwähnte : es kommt darauf an wie du die Logik vom I/O auf der Console getrennt hast. Wenn hier eine klare Trennlinie vorhanden wäre , könnte man dieses Consolen-I/O einfach durch die GUI ersetzen ... jedoch scheint es so das dies bei dir leider nicht der Fall ist. Auf Grund dessen brauchen wir schon den gesamten Code wenn wir dir produktiv helfen sollen.

    Und noch eins : abgesehen davon das es bei uns Sprachspezifische Code-Tags mit Syntaxhighlightning gibt kannst du auch , falls zu umfangreich , deinen Source hier dierekt als Anhang hochladen. Ich bitte dich KEINEN Fremdhoster zu verwenden , da dort die Daten in unbestimmter Zeit gelöscht werden und später niemand mehr die Chance hat aus diesem Thread eine Lösung zu ziehen. Zur Not packe alles in ein Zip.


    PS : auch wenn mein Post jetzt überhaupt nicht geholfen hat ist es meine Pflicht als aktives Mitglied auf die Einhaltung der Forenregeln in die wir alle bei der Registrierung eingewilligt haben zu überprüfen. Ich will mich jetzt hier weder wichtig tun noch mich bei irgendwem einschleimen ... es missfällt mir lediglich das du scheinbar nicht bereit bist Hilfe anzunehmen , und zwar in einer Art und Weise welche sich an unsere Regeln hält.
  9. Fussballgott19

    Fussballgott19 Grünschnabel

    Ich habe noch gar nichts angewendet, sondern lediglich nur gefragt welche Möglichkeiten es gibt! Und auf Anforderung habe ich den Code gepostet! Von daher verstehe ich die Antworten ehrlich gesagt nicht! :)
    Darstellung und Logik zu trennen ist sicherlich sinnvoll! Ich wollte eigentlich auch nur wissen, ob ich meiner Konsolenanwendung eine grafische Oberfläche hinzufügen kann und wie ich dann die Funtkion wie oben gepostet ansprechen kann um mir diese Werte dann in einer Textbox ausgeben zu lassen.

    Danke Schönen Tag noch!
  10. Roflmao

    Roflmao Grünschnabel

    Hallo Fussbalgott.
    Ich stand vor einer Woche genau vor dem gleichen Problem. Ich hatte ein simples C++ Programm geschrieben und habe mir gedacht, dass ich die Arbeit damit hinter mir habe. (Eine GUI drüberzulegen kann ja nicht so lange dauern). Naja weit gefehlt. Ich sitze an der Gui jetzt schon länger als am eigentlichen Programm.

    1. Du kannst es grafisch mit einem Drag & Drop Designer erledigen. (QT soll hier ziemlich gut sein) Coden wirst du trotzdem noch muessen.

    2. Ich bevorzuge direkt die win32 API. (Achtung nicht crossplatform kompatibel) Falls du des englischen mächtig bist, kann ich dir diese Videotutorials empfehlen. Es werden wirklich nur die Basics angesprochen und wie du in meinen Thread siehst brauche ich selber noch viel Hilfe, aber es wird dir einen kleinen Überblick geben.

    http://www.nickfrosty.com/videos/category/c-plus-plus (*ganz unten anfangen ;) )
    Zuletzt bearbeitet: 8. September 2011
  11. SE

    SE Gast

    @TO
    Ganz erlich : ich versuche garnicht weiter darauf einzugehen das du die von mit und sheel angesprochenen Punkte scheinbar nicht verstehst.
    Ums mal kompakt zu machen :
    -ist es überhaupt möglich : JA
    -welche Möglichkeiten hast du : woher sollen wir das ohne den KOMPLETTEN Source wissen ? Woher sollen wir wissen wie den Tool aufgebaut ist , wie es arbeitet , wie es mit den Daten umgeht ? Ein paar mehr Infos als eine einfache Methode und die Frage ob du diese einfach aus der GUI aufrufen kannst wirst du schon noch bringen müssen bevor wir dir bei deinem spezifischen Problem helfen können.

    Vielleicht ein etwas komischer Vergleich :
    "Kann ich DAS DA essen ?" - "Wenns was essbares ist sicherlich."
    "Und WIE kann ich DAS DA essen ?" - "Woher soll ich das wissen wenn du mich nicht sagst was DAS DA ist ?"

    Vielleicht verstehst du das ...
  12. Fussballgott19

    Fussballgott19 Grünschnabel

    @Roflmao Danke!

    Ist halt Ansichtssache, ich habe dort oben mein Hauptprogramm und meine Funktion gepostet. Ich rufe aus der main die Funktion auf und erhalte Parameter in einem String-Array zurück. So in meiner Konsolenanwendung habe ich diese dann per cout ausgegeben. Nun möchte ich allerdings eine Gui haben mit zwei Textboxen und dort jeweils die Werte ausgeben lassen.Ich weiß nicht wofür ihr jetzt mehzr Code benötigt......?
    So und ob ich die Werte jetzt mit der Funktion aus der Ini auslese oder sonst woher spielt doch keine Rolle! Ich verstehe die Punkte von sheel auch nicht weil sie für mich keinen Sinn machen......!
    So die Antwort von Rolflmao tut es doch......Zumindest versucht er auf das Problem einzugehen!
  13. sheel

    sheel Mod # I love Asm Moderator

    Dann halt anders:
    Aus einer Textbox asd bekommst du mit asd.Text den Inhalt.

    Ist es das, was du wissen willst?
    Diese Info wird dir trotzdem nicht helfen, das gesamte Programm auf Winforms umzustellen.

    Du kannst in ein Konsolenprogramm schon Winforms hinzufügen (als Resourcen), aber das wird nichts nützen. Sehen wirst du die GUI dadurch nicht.

    Und warum wir nach dem kompletten Code fragen:
    Es gibt mehrere Möglichkeiten, die ganze GUI-Umstellung zu realisieren.
    Mit dem Code könnten wir dir zB. sagen, welche die schnellste/einfachste für deinen Fall wäre.

    Und nocheinmal was Altes: Ich kann dir mit allen angesprochenen Sachen helfen.
    C, C++ und .NET-Winforms.
    Trotzdem sind die Winforms KEIN C oder C++!
    Das hat zwar nichts mit deinem Konsolenprogramm zu tun, aber es ist ein fatales Verständnisproblem.
    Irgendwann kommst du dann und fragst zB.
    "Warum geht das nicht auf Linux? Ein C-Programm sollte doch funktionieren?"
    Zuletzt bearbeitet: 8. September 2011
  14. SE

    SE Gast

    // EDIT
    sheel du FAST-Poster ... ich war noch am schreiben als du gepostet hast ... und mein Post ist damit so ein BISSCHEN überflüssig xD

    Du verstehst die Punkte von sheel nicht und sie machen auch keinen Sinn für dich ? ...
    Dann würde ich mir aber GANZ SCHNELL ein ordentliches Buch zum Thema Software-Design besorgen ...

    Der Punkt ist folgender :
    Du fragst nach Hilfe zu einem konkreten Problem ... ohne allerdings das Problem konkret beim Namen zu nenne bzw. den betreffenden Source zu posten.
    Um auf meine Analogie zurückzukommen : wie sollen wir dir helfen dein Tool für eine GUI umzuschreiben wenn du uns lediglich eine Methode und die Info gibst : Main -> Einlesen der Daten -> Verarbeitung -> Ausgabe ... das reicht nicht !
    Wir brauchen Ansatzpunkte wo man die Logik , also das Einlesen der Daten in welche Form auch immer sowie die Ausgabe nach Verarbeitung , und die Darstellung , also Console und GUI , von ein ander trennen kann um das eine durch das andere zu ersetzen.
    Dafür brauchen wir den Source ... um eben genau den Punkt zu finden an dem wir dein Programm "zersägen" können um neue Bestandteile hinzufügen zu können und es dann wieder in einer halbwegs sinnvollen Reihenfolge wieder zusammensetzen zu können.

    Wenn du jetzt eine Antwort auf die von dir geposteten Informationen willst ... das kann selbst ich als Java-Programmierer :

    Main -> baut GUI auf -> GUI erhält Steuerelemente -> ANZEIGE
    +-> GUI-Thread wartet auf Event *z.B. auf den Click auf einen Button* -> Lade-Thread wird angestoßen
    +-> Lade-Thread läd Daten *wie auch immer* , verarbeitet diese und informiert den GUI-Thread das die Daten bereit zum Anzeigen sind
    +-> GUI-Thread erhält Event *Daten bereit* -> GUI-Thread holt sich Daten über Getter und zeigt diese im Ziele-Element an ...


    Das ist der LOGISCHE Ablaufplan wie dein Tool nachher arbeiten müsste ...
    Nur was du jetzt verlangt hast das wir dir helfen das zu implementieren ... und genau das können wir nicht ohne den kompletten Source ...
  15. max1234

    max1234 Grünschnabel

    Man kann aber auch Grafische oberflache in C\C++ programmieren ohne .net
  16. sheel

    sheel Mod # I love Asm Moderator

    Natürlich kann man das.
    Hat doch keiner was anderes behauptet?

Diese Seite empfehlen