string nach char
-
Hallo
Ich bin noch neuling im Bereich Windowsprogrammierung und hätte gerne, dass mei Programm sachen aus einer Datei ausliest und mir in ein Fenster zaubert.
Das mit dem Fenster hat geklappt und auch irgend einen Text auszugeben .Problem: ich lese die datei mit
score.open("c:\\Roulettscore.sc", ios::in | ios::binary); score >> hscore ;aus und wenn ich ver suche hscore über drawtext auszugeben kommt
cannot convert `std::string' to `const CHAR*'wie kann ich hscore in eine char variable bekommen?? oder mach ich da grundsetzlich was falsch??
Vielen dank im voraus noha
-
Versuch's mal' mit hScore.c_str();
MfG
-
Danke jetzt klappts ohne Probleme (allerdings nur in Dev-C++) in visual c++ 2005 express bekomm ich 2 fehlermeldungen aber was ich haben wollte hab ich jetzt

-
NEIN, nicht c_str verwenden!!!! HIER NIEMALS!
So müsste es richtig sein:
string hscore; char buffer[512+1]; int bytes_read score.open("c:\\Roulettscore.sc", ios::in | ios::binary); while(!score.fail()) { bytes_read=score.read(buffer,512); buffer[bytes_read]='\0'; hscore += buffer; }So, hoffentlich hab ich jetzt da keinen Fehler eingebaut.
Also hoffentlich klappts
-
XCooperation schrieb:
NEIN, nicht c_str verwenden!!!! HIER NIEMALS!
Krieg dich wieder ein, und lies nochmal genau nach. Es geht um DrawText.
-
Was macht denn den Unterschied ob DrawText oder nicht ??
-
stream = fopen("C:\\Roulettscore.ns","r" ) ; //Zeichnen beginnen hdc = BeginPaint (hwnd, &ps); GetClientRect (hwnd, &rect); while((zeichen = getc(stream)) != EOF) { DrawText (hdc, zeichen , -1, &rect, DT_SINGLELINE ); } fclose(stream) ;bei diesem Verfahren bekomme ich die fehlermeldung:
invalid conversion from `char' to `const CHAR*'Was ist denn hier falsch??
-
na das du halt nur 1 Zeichen hast

char array[2]; array[0] = 'a'; // hier dein Zeichen ... array[1] = '\0'; // Terminierungwenn de das übergibst, geht es, da ein array als pointer übergeben wird.
-
Ich versteh nicht wirklich was du meinst, wie soll ich das denn schreiben?
so? :stream = fopen("C:\\Roulettscore.ns","r" ) ; //Zeichnen beginnen hdc = BeginPaint (hwnd, &ps); GetClientRect (hwnd, &rect); while((zeichen[x] = getc(stream)) != EOF) { DrawText (hdc, zeichen[x] , -1, &rect, DT_SINGLELINE ); x++ ; } fclose(stream) ;denn da kommt noch immer der Fehler ?!?

-
bool draw_content(HDC hDC, const std::string& filename) { if (hDC == NULL) return false; std::ifstream file_stream(filename.c_str(), std::ios::in); if (file_stream.is_open() == false || file_stream.good() == false) return false; char item[2]; item[1] = '\0'; while(file_stream.get(item[0])) DrawText (hDC, item, -1, &rect, DT_SINGLELINE); file_stream.close(); return true; }Aber ich weiß nicht warum du unbedingt jedes einzelne Zeichen haben willst ... schiebe alles in nen Stream und geb den dann auf einmal mit DrawText aus ...
-
ich habe mir das jetzt mal "umgebastelt," damit es in mein Programm past und es sieht folgendermaßen aus:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; string filename="c:\\Roulettscore.sc" ; //Variablen für den Auslesemechanismus //fstream score ; //string hscore ; switch (message) /* handle the messages */ { case WM_PAINT: //Auslesen //score.open("c:\\Roulettscore.sc", ios::in | ios::binary); //score >> hscore ; //Zeichnen beginnen hdc = BeginPaint (hwnd, &ps); GetClientRect (hwnd, &rect); std::ifstream file_stream(filename.c_str(), std::ios::in); if (file_stream.is_open() == false || file_stream.good() == false) char item[2]; item[1] = '\0'; while(file_stream.get(item[0])) DrawText (hdc, item, -1, &rect, DT_SINGLELINE); file_stream.close(); return true; EndPaint (hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ return 0; } return DefWindowProc (hwnd, message, wParam, lParam); }aber da kommt jetzt (erstaunlicherweise) :
`item' undeclared (first use this function)
--> damit ist die Zeile mit item[1] = '\0'; gemeint
-
* habe die überflüssigen return weggemacht
-
Du hast scheinbar ka was du da überhaupt machst ... naja
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; switch (message) { case WM_PAINT: { HDC hDC = BeginPaint (hwnd, &ps); RECT rect_client; GetClientRect (hwnd, &rect_client); std::ifstream file_stream("C:\\Roulettscore.sc", std::ios::in); if (file_stream.is_open() == true || file_stream.good() == true) { char item[2] = { ' ', '\0' }; while(file_stream.get(item[0])) DrawText (hdc, item, -1, &rect, DT_SINGLELINE); file_stream.close(); } EndPaint (hwnd, &ps); return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }...
-
Es stimmt schon dass ich mich nicht "so gut" auf das auslesen von dateien verstehe aber dein Quelltext gibt auch immer nur das letzte Zeichen der Datei aus.
-
nöö ... das war ja klar das du wirklich ka hast ^^ dein Problem ist einfach das du jedes Zeichen wieder überschreibst ... warum holst du dir nicht einfach den kompletten content in EINEN String und zeichnest das dann mit DrawString?
-
Ich werde es versuchen (bin noch Anfänger und habe noch nichts von DrawString gewusst) trotzdem schonmal vielen Dank für deine Gedult

-
Sorry das ding heißt auch DrawText ... hab mich vertan ...
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; switch (message) { case WM_PAINT: { HDC hDC = BeginPaint (hwnd, &ps); RECT rect_client; GetClientRect (hwnd, &rect_client); std::ifstream file_stream("C:\\Roulettscore.sc", std::ios::in); std::string string_content; std::string string_in; if (file_stream.is_open() == true || file_stream.good() == true) { while (file_stream.eof() == false) { std::getline(file_stream, string_in); string_content += string_in; } DrawText(hDC, string_content.c_str(), string_content.length(), &rect, DT_SINGLELINE); file_stream.close(); } EndPaint (hwnd, &ps); return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }... so bekommst de den Dateiinhalt ...
-
ich werde es aufs neue versuchen (aber es gibt auch DrawString -> habe ich bei microsoft gefunden; sogar 4 verschiedene Varianten)
-
noha schrieb:
Ich bin noch neuling im Bereich Windowsprogrammierung [...irgend ne simple Frage...]
Glaubst du es ist wirklich sinnvoll, sich mit einer komplizierten, unsauberen API rumzuschlagen, wenn man noch nicht mal die Grundlagen von C++ beherrscht? ...
-
Das programm lässt sich jetzt ohne Probleme kompilieren (nach 3 winzigen Änderungen) allerding bekomme ich nur sowas auf den Bildschirm:
||||||||||o||||||||q|||liegt das am Problem Unicode - Ansi ??
(gemachte Änderungen: std:: vor getline weg, headerdatei eibinden und
string_content.c_str() wird (LPCWSTR)string_content.c_str()anders ließ es sich nichtmal kompilieren