Text blinkt nervig, was tun?



  • Hey,

    ich hab eine Art Overlay geschreben, also ein Transparentes Fenster ohne alles, welches über einem (fremden) Fenster sitzt und einen Text anzeigt.
    Klappt auch alles, nur ich hab ein Problem mit der Art der Darstellung.
    Ich nutze TextOut um den String in mein (Overlay)-Fenster zu schreiben. Nun wird der Text jede Sekunde aktualisiert, da es eine Uhr ist. Jede Sekunde blinkt dann die Anzeige kurz auf, da ich mein Fenster mit "InvalidateRect" erst leere und danach den String neu reinschreibe mit "TextOut".
    Wie kann ich das besser machen, damit man dieses "leeren" und "neu reinschreiben" nicht bemerken kann?

    Wenn verlangt poste ich gern Code, ist jedoch wie gesagt nix wildes.

    Danke für die Hilfe



  • kann doch nicht sein, dass da keiner was weiß?



  • Buffer



  • Soetwas ähnliches hatte ich mal mit einer Schreiben in eine compatible bitmap
    und und dann Aufrufen von bitblit gelöst.

    Ob das auch bei transparenten Fenstern so geht ?
    Die Transparenz musste ich übrigends selbst lösen ...

    Gruß Frank



  • Poste vll doch mal deinen Code, vielleicht hilft das ja.
    So direkt fällt mir da auch nichts ein..



  • ok dann kommt hier mal etwas code. Das ist die DLL-C Methode zum schreiben in ein Fenster. (Die Variablendeklaration hab ich mal weggelassen)

    HFONT font = CreateFont(size, 0, 0, 0, iStyle, isItalic, isUnderline, 0, 0, 0, 0, 0, 0, c_font);
        SelectObject(hdc, font);
        COLORREF color = RGB(c1, c2, c3);
        COLORREF bcolor = RGB(b1, b2, b3);
        SetBkColor(hdc, bcolor);
        SetBkMode(hdc, iBkMode);
        SetTextColor(hdc, color);
        TextOut(hdc, x, y, c_string, l);
    
        ReleaseDC(h, hdc);
        DeleteObject(font);
    

    Vorher setze ich mit InvalidateRect den bereich neu, wo der String geschrieben wird, also Quasi mein komplettes Fenster.

    Ich erzeuge die Fenster aus einer DLL heraus und hab keinen WM_PAINT handler. Ich rufe halt immer die Funktion da oben auf wenn was reingeschrieben wird und InvalidateRect um es zu löschen. Hat bisher bei fremden Fenstern immer geklappt, dort hab ich aber nicht jede Sekunde neu gezeichnet..


Anmelden zum Antworten