Problem mit Datentypen und Ausgabe in Fenster
-
Hallo Leute,
ich hab mal wieder ein Problem. Dies hängt mit den verscheiden Datentypen zusammen.
Hier erstmal der Codevoid manzeigen(HWND hwnd) { wchar_t name[20]; char gelesen[1000]; SendMessage(hwndEdit,WM_GETTEXT,20,(LPARAM)name); //Name der datei auslesen wstring wname; // wname+=name; // wstring nimm wchar_t auf string Name(wname.begin(),wname.end()); // wstring in string umwandeln Name="c:/Sc0rpeProject/"+Name+".txt"; // Dateipfad zusammenbauen ifstream dat; dat.open(Name.c_str(),ios_base::in); dat.get(gelesen,1000); //Auslesen aus der datei hwndAnzeige =CreateWindow(L"edit",L"", WS_VISIBLE | WS_CHILD | ES_MULTILINE | ES_AUTOVSCROLL,420,50,550,500,hwnd,NULL,GetModuleHandle(0),0); //ausgabe in Editfenster SetWindowText(hwndAnzeige,(LPCWSTR)gelesen); return; }
so nun zum Problem. Bei der Ausgabe im Edit-Fenster erscheinen dann nur irgendwelche chinesischen zeichen. Nur hab ich keine Ahnung welche möglichkeiten es gibt um den text so auszulesen aus der Datei und ihn dan auszugeben.
Dazu möchte ich sagen das ich es schon mit fopen() und fread() versucht habe aber da kann ich meine datei nicht wie gewünscht öffnen lassen da der Dateipfad wie man sieht von der eingabe des benutzters abhängt.
-
Casten ist immer schlecht... das "(LPCWSTR)" ist hier das Problem....
-
ja das ist mir schon bewusst, aber solangs drin ist kompiliert er es wenigstens, wenn ichs weglass krieg ich diese fehlermeldung und es startet nicht
1>.\main.cpp(297) : error C2664: 'SetWindowTextW': Konvertierung des Parameters 2 von 'char [1000]' in 'LPCWSTR' nicht möglich
-
Dann solltest Du Dich mal mit der Fehlermeldung beschäftigen
Ein kleiner Tipp: UNICODE / ANSI / TCHAR sind die Schlüsselworte
-
Jochen Kalmbach schrieb:
Dann solltest Du Dich mal mit der Fehlermeldung beschäftigen
Ein kleiner Tipp: UNICODE / ANSI / TCHAR sind die Schlüsselwortedas ist ncihtunbedingt das Problem, das Problem ist das ich nciht weiß wie ich das ganze machen soll, auf der einen Seite brauch ich char ums aus der datei einzulesen und darin zu speichern aber dann wiederum was anderes ums auszugeben, und wie ich das nun umwandeln soll weiß, ich nciht. Reicht eventuell schon wenn du mir einen kleinen denkanstoß verpasst
du sollst ja auch nicht gleich den ganzen code für mich schreiben
Das ganze ist für mich noch ziemlich neuland da ich bis jetzt nur in der Konsole gearbeitet habe, da hatte man solche probleme eher selten
-
Schau mal hier: http://www.c-plusplus.net/forum/304613
-
Wenn Du "char" brauchst und gleichzeitig unbedingt ein "UNICODE" Programm erstellen willst, dann musst Du eben zwischen diesen beiden Welten konvertieren...
Siehe dazu auch MultiByteToWideChar
http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072
oder auch mbsrtowcs
http://msdn.microsoft.com/en-US/library/67tc3c7x
-
Alles klar, das war scho nrecht hilfreich ich jetzt einfach SetWindowTextA(); benutzt und das ganze funktioniert auch mit einem normalen chararray, jedoch nciht ganz wie gewollt. mir wird jetzt nur die erste zeile der datei angezeigt, jedoch habe ich viel mehr zeilen, das char array hat auch genug elemente um alle zeilen aufzunehmen. liegt es vlt. an .get() aber theorethisch liest diese funktion ja maximale zeichen ein
-
Ich vermut mal, dein Problem ist, dass das Edit Control kein '\n' sondern "\r\n" als Zeilenumbruch erwartet...
-
Dann liest Dir einfach mal die Doku durch...
http://www.cplusplus.com/reference/iostream/istream/get/
http://msdn.microsoft.com/en-us/library/windowsazure/aa651700Übergebe einfach "0" als Delimiter...
-
Jochen Kalmbach schrieb:
Dann liest Dir einfach mal die Doku durch...
http://www.cplusplus.com/reference/iostream/istream/get/
http://msdn.microsoft.com/en-us/library/windowsazure/aa651700Übergebe einfach "0" als Delimiter...
das mit '\0' als delimiter zu übergeben funktioniert, was mich nur wundert ist das aber acuh ohne wenigstens die 1000 elemente die ich definiert habe einzulesen.
Danke jedenfalls erstmal für eure hilfe