Desktop neuzeichnen nach TextOut (Repaint)



  • Hallo Leute,

    ich mach (versuche) eine Art OSD (OnScreenMenu) wie beim TV, auf
    den Kompletten Desktop.

    Ich schreibe einmal pro Sekunde mit TextOut die Uhrzeit auf dem Desktop,
    wie kann ich den Desktop neuzeichnen ohne diese Ausgabe, damit die neue
    Zeit nicht übermalt wird?

    Hier mal der Code:

    HWND hwnd = GetDesktopWindow();
            HDC ddc = GetWindowDC(hwnd);
            RedrawWindow(hwnd,NULL,NULL,RDW_ALLCHILDREN); // HIER liegt mein Frage
            LPCTSTR txt = TimeToStr(Now()).c_str(); //TimeToStr und Now von BCB
            HFONT hFont =  CreateFont(-MulDiv(24, GetDeviceCaps(ddc, LOGPIXELSY), 72),
                           0, 0, 0, 700, 0, 0, 0, ANSI_CHARSET,
                           OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
                           DEFAULT_PITCH, "Arial");
    
            SelectObject(ddc,hFont);
    
            SetBkMode(ddc, TRANSPARENT);
            SetTextColor(ddc,RGB(255,255,0));
            TextOut(ddc,10,10,"              ",14);
            TextOut(ddc,10,10,txt,8);
            ReleaseDC(hwnd,ddc);
    

    gruß Micha



  • Ich denke, dass du über direktes Zeichnen auf den Desktop keine sauberen Ergebnisse (ohne Flackern) bekommst. Du könntest entweder versuchen ein transparentes Fenster darüber zu legen, oder mittels Hooking und / oder SubClassing die entsprechenden Nachrichten abzufangen 🙂



  • Hmmm,

    meines Wissens funktioniert Transparentes Fenster nicht bei win98.
    Die Message abzufangen habe ich auch schon daran gedacht und halt den
    ursprünglichen Hintergrund zwischen zu speichern und und und...

    Das Flackern (ist bei mir nicht) zu Verhindern ist im Moment nicht mein
    Ziel, ich gebe in der linken-oberen Ecke die Uhrzeit aus, und per Timer
    soll 1 Sekunde Später dies überschrieben werden, nur das wird auf die
    alte Uhrzeit drauf gemalt, daher muß ich den alten Hintergrund wieder
    Herstellen.

    Meine jetzige Idde ist:
    Ich fang die Paint Message ab, und speichere den neuen Hintergrund, den mein
    Timer als Hintergrund Brush verwendet.

    Wenn es bessere oder einfachere Möglichkeiten geben sollte, bitte mitteilen.

    gruß Micha



  • promicha schrieb:

    meines Wissens funktioniert Transparentes Fenster nicht bei win98.

    Doch!

    Du könntest auch ein STATIC auf dem Desktop platzieren.



  • WebFritzi schrieb:

    Doch!

    Du könntest auch ein STATIC auf dem Desktop platzieren.

    Ich habe schon mal experimental mit Trans. Windows gearbeitet,
    das Resultat war nicht berauschend und bei XP super.

    Ne STATIC drauf hauen ist ne Idee, probiere ich mal aus ob es
    für mich zu genüge kommt.

    Ich habe zwischenzeitlich einiges versucht was auch hinhaut, aber
    es sollte so einfach wie möglich sein und nicht viel an Resourcen
    verbrauchen.

    Ich probier das aber auch nochmal mit dem Glass-Window, vieleicht
    bekomme ich es ja sauber, ist 2 Jahre her wo ich mich damit beschäftigt habe,
    jetzt weiß ich mehr.

    OFFTOPIC<<<
    @WebFritzi
    ich Plane im Spätsommer oder ehr ein kostenloses DevTool ins Net zu schmeisen,
    mit einigen Funktionen (AutoClass, VarManeger etc..) also einige Hilfreiche
    Funktionen für Progger, dein RegionBuilder passt da rein und vieleicht noch
    anderes, wenn du lust hast (auch andere) mittzumachen und paar Klassen zur verfühgung
    stellen kannst, melde dich dann bei mir unter devtool@24day.de .
    Und wenn du jetzt meinnst, er will nur an mein RengBuilder-Code, ja will ich,
    so brauche ich es nicht selbst schreiben, die Quelle wie es geht habe ich auch
    und verstehen tue ich es auch 🙂 ist auch gar nicht so schwer.
    Aber ich will mir auch Arbeit erleichtern, sozusagen Progger4Progger.

    OFFTOPIC_END<<<


Anmelden zum Antworten