Problem mit Windows Programmierung

Trendy Andy

Mitglied
Hallo!

Ich habe ein Windows Console Programm geschrieben, dass eine TXT Datei öffnet und alle Zeichen einliest und dann die Häufigkeit jedes einzelnen zeichens ausgibt.
Nun will ich das Programm als Windows Anwendung umändern. Das klappt auch soweit ganz gut. mit datei öffnen wähle ich die datei aus und die wird dann dem zählallgorithmus übergeben. Ich wollte dann mit "SetDlgItemText()" das Ergebnis im Dialogfenster anzeigen lassen! dieser funktion muss ich einen char übergeben. in der console anwendung war das eine printf Anweisung. Nun möchte ich dies was in der printf Anweisung steht einem char und damit dem Dialog übergeben! Wie kann ich das am dümmsten machen?

Ich häng mal den Quelltext der console anwendung an und markiere das was ich meine.

Code:
#include <stdio.h>

FILE *stream;
char zeichen;
int counter[256];
int i, anz_zeichen=0;

int main()
{
	for (i=0;i<256;i++)
		counter[i]=0;
	if((stream=fopen("text.txt","r"))==NULL) printf("\nERROR: Konnte die Datei nicht oeffnen!\n");
	else
	{
		while(!feof(stream))
		{
			zeichen = getc(stream);			// lese Zeichen aus Datei
			counter[zeichen]++;
		}
		fclose(stream);
		for (i=0;i<256;i++)
			anz_zeichen=anz_zeichen+counter[i];
		printf("\nAnzahl eingelesener Zeichen: %i",anz_zeichen);
		for (i=0;i<256;i++)
		{
			int dummy=counter[0],dummy_index=0;			
			for(int j=0;j<256;j++)			// Funktion zum Ermitteln des größten Elements
			{
				if(dummy<counter[j])
				{
					dummy = counter[j];
					dummy_index=j;			// dummy_index speichert den Index des größten Elements
				}
			}
			if(dummy!=0)
			{
				switch (dummy_index)
				{
				case 9:
                    printf("\nAnzahl des Zeichens 'TABULATOR'=%i und in Prozent: %2.2f%%",dummy,((float)dummy/(float)anz_zeichen)*100);
					break;
				case 10:
                    printf("\nAnzahl des Zeichens 'ENTER'=%i und in Prozent: %2.2f%%",dummy,((float)dummy/(float)anz_zeichen)*100);
					break;
				case 32:
					printf("\nAnzahl des Zeichens 'SPACE'=%i und in Prozent: %2.2f%%",dummy,((float)dummy/(float)anz_zeichen)*100);
					break;
				default: 
					printf("\nAnzahl des Zeichens '%c'=%i und in Prozent: %2.2f%%",dummy_index,dummy,((float)dummy/(float)anz_zeichen)*100);
				}
			}
			counter[dummy_index]=0;			// aktuell größtes Element wird auf Null gesetzt, damit es beim nächsten 
		}									// Durchlauf nicht mehr mitgezählt wird
	}
	return 0;
}

Ich mein die printf´s in der case anweisung.
 
Zuletzt bearbeitet:
Am besten machst du eine neue MFC-Dialoganwendung und setzt ein mehrzeiliges Editcontrol auf den Dialog. Deine Logik sollte entweder von einem Tastendruck (Button auf Dialog!) oder aus OnInitDialog() gestartet werden. Das Resultat deiner Berechnungen kannst du dann in das Editfenster schreiben.
Stichworte zum Suchen: CEdit, CDialog::OnInitDialog, SetWindowText

Hoffe, es hilft.
 
ja ich hab schon ein mehrzeiliges Editcontrol erstellt! dem wollte ich ja mit SetDlgItemText() die Berechnung übergeben! nur hab ich jetzt das problem, das ich den char die zeile im printf übergeben will. dazu muss ich aber die Anzahl und die Häufigkeit in chars umwandeln und an den ersten char anhängen! Das mit dem anhängen klappt halt überhaupt nicht richtig.

Mit MFC kenn ich mich noch gar nicht aus!
 
Am besten machst du eine neue MFC-Dialoganwendung
Auuuh.
Also Peter versteh mich net falsch, nix gegen MFC, aber wenn jemand von Konsolenprogrammierung auf Windows-GUI umsteigt, dann soll er bitte nicht sofort mit MFC anfangen. Denn das geht in die Hose, zumindest irgenwann.
Außerdem benötigt man dazu meist VC++.
Demnach sollte man zunächst mal mit Fensterbehandlung rumwerkeln.
Code:
// Pseudocode
WinMain(...)
{
   RegisterClassEx(...)
   CreateWindowsEx(...)
   while (GetMessage(....)
   {
   ...
   }
}

LRESULT CALLBACK WindowProcedure(...)
{
   switch (message)
    {
         ...
    }
}
Denn wenn da die Grundprinzipien verstanden sind, dann kann man zu Werkzeugen wie MFC, GTK, QT usw. greifen.

Gruß Homer
 
@Trendy Andy
Schau dir mal die C-Funktionen sprintf, strcpy und strcat, damit wirst du weiterkommen.
Als Kompromiss kannst du ja eine Strinklasse verwenden und zwar std::string aus der STL.

Gruß Homer
 
Das Windowsprogramm steht schon! Das ist jetzt net das Problem! Nur die Übergabe in das Editcontrol Fenster!
Ich hab schon etwas mit den Funktionen rumprobiert.
Normalerweise müsste ja sowas gehen wie hier:
Code:
string s1="hallo";
string s2="world";
string ausgabe;

ausgabe= s1 +  " " + s2 + "!";

Nur kommt da bei mir ständig ein Fehler wie: Kann nicht 2 Pointer hinzufügen oder kann nicht konvertieren oder so!
Ich hab die Anzahl und die Häufigkeit mittels der Funktion _gcvt() von double in chars umgewandelt!
 
@Daniel:
Schon okay, ich wollte ihm nur einen schnellen Weg zu Dialog zeigen. Aus seinem Post habe ich nicht ersehen, dass er das schon erledigt hat.

@Andy: Dein Problem ist also das mit den Strings? Handelt es sich um std::string? Dann versuch mal Folgendes:
Code:
ausgabe= s1 +  string(" ") + s2 + string( "!");
Dadurch konvertierst du deine "Stringkonstanten" in std::strings und es sollte funktionieren. Für die Übergabe an die API-Funktionen ist auch noch std::string.c_str() hilfreich (falls du es noch nicht weisst). Das gibt den vom std::string verwalteten Text als const char* zurück.
 
Zurück