Von der Konsolenanwendung zur grafischen Oberfläche

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
 
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.
 
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:
//Eine Funktion die Parameter aus einer INI ausliest
void getprogparameter(string inipath, string *startparameter)
{
	const unsigned long puffer_size = 255;
	char puffer[puffer_size];
	//char ini[] = "c:/Project_OGDF/CPL/Release/config.ini";
	GetPrivateProfileSection( "Parameter", puffer, 1024, inipath.c_str());
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
 
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.
 
Also folgendes:

Code:
void getprogparameter(string inipath, string *startparameter)
{
	const unsigned long puffer_size = 255;
	char puffer[puffer_size];
	//char ini[] = "c:/Project_OGDF/CPL/Release/config.ini";
	GetPrivateProfileSection( "Parameter", puffer, 1024, inipath.c_str());
	
	char* key = puffer;
	string strkey;
	int i = 0, pos = 0;
	while (*key)
	{
		strkey = key;
		pos = strkey.find('=');
		strkey = strkey.substr(pos+1);
		startparameter[i++] = strkey;
		key += strlen(key) + 1;
	}
}

int main(int argc, char* argv[]) {
std::string startparameter[5];
std::string inipath("");
inipath = "C:/temp/test.ini"
getprogparameter(inipath, *startparameter)
//Textbox1 = startparameter[0]; dass soll passieren******
//Textbox2= startparameter[1];
return 0;
}
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
 
Jetzt lies das bitte nocheinmal und denk nach, was es bedeutet.

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 zum Projekt hinzufügen" ist gar nichts geholfen.

Generell: MVC-Pattern. Gezielt kann man so nicht sagen, ob es schon passt oder nicht.
 
Zuletzt bearbeitet:
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******'
 
@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.
 
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!
 
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:

Neue Beiträge

Zurück