Neuzeichnen von TextOut



  • Hallo Leute

    Ich hab ein kleines Problem, und suche schon den ganzen Morgen nach einer Möglichkeit. Leider habe ich bis jetzt noch nichts gefunden. Ich hoffe Ihr könnt mir helfen.

    Ich hab diese Funktion als Beispiel. Sie entspricht etwa genau dem was ich in meinem Programm habe. Es handelt sich um eine normale Konsolenanwendung und nicht um eine Windowsanwendung.

    Danke für die Hilfe

    wachs

    #include "stdafx.h"
    #include <sstream>
    #include <iostream>
    #include <Windows.h>
    
    int _tmain(int argc, _TCHAR* argv[]){
    	HWND h = GetDesktopWindow(); 
    	std::string s;
    	for(int i=0;i<5;i++){
    		s="";
    		for(int j=0;j<20;j++){
    			std::stringstream ss;
    			ss<<i;
    			s+=ss.str();
    			HDC hdc = GetDC(h);
    			TextOutA(hdc,100,100,s.c_str(),s.length());
    			ReleaseDC(h,hdc);
    			Sleep(500);
    		}
    	}
    
    	return 0;
    }
    

    Nun habe ich das Problem, das nicht Neugezeichnet wird. Die Ausgabe sieht also bei mir nach der ersten Runde (i=0 zu i=1) immer so aus.

    00000000000000000000
        10000000000000000000
        11000000000000000000
        11100000000000000000
        etc.
    

    Ich möchte aber, dass Neugezeichnet wird, dann würde das so aussehen.

    00000000000000000000
        1
        11
        111
        etc.
    


  • Guck mal nach InvalidateRect.



  • Danke roflo für die Antwort

    Das habe ich eben schon den ganzen morgen versucht, und will mir nicht gelingen.
    Ich habe es auch schon mit DrawText versucht, aber da flakerts bei mir ungemein.

    wachs



  • Ich glaub mit WinGDI kriege ich das nicht in den Griff. Ich habs jetzt nochmals versucht.

    Gibt es eventuell auch etwas anderes, mit dem man Text ausgeben kann? Die Anforderungen sind gering. Ich müsste die Schrift und die Schriftgrösse, sowie die Schriftfarbe anpassen können, da diese während der Laufzeit ändern können?

    Danke für die Antwort.

    gruss wachs


  • Mod

    Du kannst So nicht auf den Desktop zeichnen. Du zwerstörst damit ja den Inhalt der anderen Fenster!
    Lege ein transparentes Window darüber und zeichne darin.

    Was hast Du denn vor?



  • Hallo Martin Richter

    Danke für die Antwort. Vorab, ich habe keine Fenster, die Erzeugt werden. Es handelt sich hier um eine altbewährte Konsolenanwendung, die nach einer Berechnung den Wert kurz auf dem Bildschirm ausgibt.

    Ein MSGBox wurde extra nicht gemacht, da das Programm sofort weiter rechnen muss. Darum finde ich die Ausgabe per TextOut (ausgelagert in ein Thread) gar nicht so schlecht.

    Wie meinst du das mit dem transparentem Windows? Wie erzeuge ich diese?

    danke und gruss wachs





  • Danke euch, bin schon dran 🙂

    Gruss wachs



  • Hat bestens geklappt. Hab das Ganze jetzt umgeschrieben zu einer Windowsanwendung, und somit funktionieren jetzt auch die entsprechenden WinGDI-Funktionen.

    danke nochmals

    gruss wachs.


Log in to reply