string nach char
-
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
-
hmm achso hast de UNICODE an? dann machs anders:
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::wifstream file_stream(L"C:\\Roulettscore.sc", std::ios::in); std::wstring string_content; std::wstring 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 += "\n"; 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); }und vor getline gehört ein std:: ... und bei den restlichen Funktionen halt die UNICODE Variante nehmen ...
-
So das tut es, ich sehe jetzt den Inhalt (nur ohne Zeilenumbrüche, obwohl die Datei welche hat) kann man das noch ändern oder ist das wieder ein riesiges umkramen??
-
habs angepasst ...