InvalidateRect() am Desktop



  • return value ist true. müsste also gehen.

    mfg,
    andi01.



  • Nein, denn TRUE != NUL. Wie gesagt: Der Deskto phat normalerweise das Handle NUL. Also bezieht sich GetDesktopWindow möglicherweise auf etwas anderes.



  • lol, du hast Recht 😮

    nur mal ne kleine verständnisfrage: es gibt doch nur einen desktop, oder? wie kann sich da getDesktopWindow() auf was anderes beziehen? 😕

    ok, jetzt reagiert der Desktop schonmal 🙂

    allerding wird so der gesamte desktop neu gezeichnet:

    RECT rect;
       rect.left=110;
       rect.top=110;
       rect.right=220;
       rect.bottom=220;
    bool success=InvalidateRect(NULL, &rect , TRUE);
    

    kann ich es noch irgendwie schaffen dass nur das angegebene Rechteck neugezeichnet wird?

    mfg,
    andi01.



  • Hallo.

    http://msdn.microsoft.com/en-us/library/dd145002(VS.85).aspx

    hWnd [in]
    A handle to the window whose update region has changed. If this parameter is NULL, the system invalidates and redraws all windows, and sends the WM_ERASEBKGND and WM_NCPAINT messages to the window procedure before the function returns.

    Du musst also schon das Desktophandle angeben und nicht einfach nur NULL.

    Lg Tobi



  • wie bekomme ich denn dann das richtige Handle (desktop-handle)? mit GetDesktopWindow() scheint es ja nicht zu klappen.

    gibt es eine funktion die mir das passende handle liefert?

    mfg,
    andi01.



  • Also eigentlich sollte das ja funktionieren, was willst du denn nun genau machen, evtl. gibts ja Alternativen.

    Lg Tobi



  • also momentan zeichne ich mit der gdi+ alle möglichen objekte(linien, kreise,...) auf den Desktop. Mein eigentliches Ziel war es diese einzeln wieder löschen zu können, und da es keine vorgefertigte Funktion wie DeleteLine() oder so gibt war die einzige Möglichkeit einen Teil des Desktops neu zu zeichnen.

    die einzige Methode die mir dazu einfällt den Desktop teilweise neu zu zeichnen ist InvalidateRect(), weil man da im 2. Parameter ein neu zu zeichnendes Rechteck angeben kann.

    Allerdings kommt es mir nicht auf die Methode InvalidateRect() an, wie ich das mit dem einzelnen Löschen dann hinkriege ist ja egal, hauptsache es klappt 🙂

    mfg,
    andi01.


  • Mod

    Und warum legst Du kein transparentes Fenster über den Desktop?



  • naja, da die Idee mit InvalidateRect() am Desktop irgendwie nicht richtig funktioniert wird mir sowieso nichts anderes übrig bleiben 🙂

    allerdings habe ich sowas noch nie gemacht... wie kriegt man so ein fenster transparent?

    mfg,
    andi01.



  • ws_ex_layered


Anmelden zum Antworten