Windows-Desktop updaten ?!



  • hallo,

    vieleicht kennen ja einige von euch diese kleinen lustigen programme
    welche kleine schafe oder so über den bildschirm laufen lassen.

    ich würde soetwas gerne selber machen, stehe allerdings vor einem hinderniss.

    ich kann mein kleines bild auf den Windows-Desktop zeichen - dieser
    aktualisiert sich allerdings nicht und somit "zieht" sich mein bild
    über den desktop anstatt sich zu bewegen.

    mein frage: wie kann ich den windows-desktop updaten? oder muss ich alle geöffneten fenster über ein handle ansprechen und diese updaten?

    danke euch schonmal!!

    hier mein code:

    CWnd *pWnd;			// Zeiger auf ein CWnd Objekt
        CRect rec;			// CRect objekt
        pWnd = GetDesktopWindow();	// ich hole mir das Dektopfenster
        pWnd->GetWindowRect(rec);   // hole mir die Aktuelle Auflösung
        CDC dc;			// Gerätekontext 
        dc.m_hDC = ::GetDC(NULL);	// Desktop Handle holen.
    
        // Bild zeichnen
    
        // test:
        pWnd->UpdateWindow();
        pWnd->Invalidate();
    

    ich würde mich über vorschläge oder lösungen sehr freuen 🙂

    p.s:

    pWnd->UpdateWindow();
        pWnd->Invalidate();
    

    wie in meinem Beispiel klappen net... jedenfalls bei mir 🙂



  • Wie zeichnest du das Bild denn genau?



  • über diese funktion:

    void CBlabView::BabelShowImage(int x,int y,CDC* pDC,CBitmap* BM)
    {
    	BM->GetObject(sizeof(bm),&bm);
    
    	CDC SpeicherDC;
    
    	SpeicherDC.CreateCompatibleDC(pDC);
    	SpeicherDC.SelectObject(BM);
    
    pDC->StretchBlt(x,y,bm.bmWidth,bm.bmHeight,&SpeicherDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    }
    

    also ich übergebe das Desktop-Handle meiner funktion und zeichne es

    BabelShowImage(x,300,&pDC,&Bitmap[i]);
    


  • Benutze doch ein Window, welches Du auf dem Desktop verschiebst. Das zu suchende Thema währe Skinning, siehe dazu:

    http://www.flipcode.com/articles/article_win32skins.shtml

    Nur so als Tip, bevor Du noch ewig Suchst wie Du den Desktop Refreshen kannst. Davon abgesehen zeichnet man nicht Direkt auf den Desktop, Dir würde es auch nicht gefallen, wenn ein anderes Prg in dein Window zeichnet. Des weiteren wird das Problem mit dem Flakern auftreten, wenn Du ständig den Desktop des Anwenders aktualisierst. Das ist dann bei mir der späteste Zeitpunkt um ein Programm in die ewigen Jagdgründe zu schicken (Deinstallieren) und nach Alternativen zu suchen.

    Gruß



  • hallo CTecS

    danke für deinen Beitrag - ich habe mich den abend über in das thema
    mit dem window-skinning eingearbeitet stehe nun jedoch wieder vor einem problem 🙂

    also meine figur die sich über den bildschirm bewegen soll besteht ersteinmal
    aus 5 kleinen bildern damit sie sich "bewegt".

    ich habe es so gelöst das ich für die 5 bilder 5 verschiedene skins erstellt
    habe und diese dann immer nacheinander geladen habe - leider flackert dies 🙂
    (hätte ja klappen können...)

    und ich frage mich ob es nicht noch mehr flackern würde wenn ich die bilder als richtige bilder ausgeben würde?!

    Danke...



  • Mal mein Tip dazu:

    Lade all deine Bilder bei Programmstart, und setze bei jeden Bilde den Clipping-Bereich und blitte dann das Komplett fertige Bild in dein Window. Also wenn Du noch was machst mit dem Bild, dann Benutze Duble-Buffering. Ansonsten kann ich ohne mehr Onfos auch nicht sagen warum es Flackert.

    Gruß



  • hmm ich bekomme das irgendwie nicht hin!

    geht es nicht einfach das man das standart-fenster von MFC
    transparent macht und halt nur die bilder die ich abwechseln
    ausgebe sieht?

    skinning und MFC kann ich irgendwie nicht verbinden das
    spielt verrückt :-|

    danke!


Anmelden zum Antworten