string nach char



  • 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 ...


Anmelden zum Antworten