Winapi Draw on Screen!



  • Hallo,

    Ich habe ein Problem. Ich möchte etwas auf den Bildschirm zeichnen. Zb ein Rechteck. Wenn ich mein Programm starte erschein wie gewollt das Rechteck, aber das Rechteck flackert. Was kann ich dagegen tun?
    Hier der code:

    void Menue(int i)
    {
         HWND foreground = NULL;
         HDC hdc = NULL;
         bool draw;
         draw = true;
         bool radaron;
         radaron = true;
         HBRUSH NewBrush;
               if(GetAsyncKeyState(VK_DELETE))
               {
                  draw = !draw;
               } 
               if(draw)
               {
                 NewBrush = CreateSolidBrush(RGB(255, 204, 51));
                 SelectObject(hdc, NewBrush);
                 foreground = GetForegroundWindow();
                 hdc = GetDC(foreground);
                 SetBkMode(hdc, TRANSPARENT);
                 Rectangle(hdc, 10, 300, 200, 500); 
                 UpdateWindow(foreground);
                 ReleaseDC(foreground,hdc);
                 }
                 Sleep(1); 
      }
    


  • Willst du in dein eigenes Fenster malen oder in ein fremdes?

    Wenn es das eigene ist: Benutze WM_PAINT. Wenn es immernoch flackert, dann mach dir per CreateCompatibleDC ein memdc, bau dir mit CreateCompatibleBitmap ein Bild, zeichne alles in das memdc und wenn alles fertig ist kannst du mit BitBlt alles auf das Original kopieren.

    Wenn es ein anderes Fenster ist hast du das Problem, dass sich deine Anwendung als auch die Fenster-besitzende Anwendung gegenseitig alles übermalen und das kriegt man auch nicht weg. In dem Fall würde ich lieber ein eigenes Fenster malen, obigen Ansatz verfolgen und das Fenster transparent für Klicks machen.



  • Also es ist ein fremdes Programm. Ich möchte einfach sachen hineinzeichne. Das Problem ist ja dass es dann flackert 😕 Gibt es da keine möglichkeit das zu beseitigen?



  • Doch, habe ich doch geschrieben. Eigenes Fenster aufmachen, vor die Anwendung schieben, kein flackern mehr. Du kannst auch mal nach Overlays für verschiedene Spiele suchen, da wird das benutzt.



  • es könnte auch an dem anderem programm liegen...

    Oder du rufst Menue() in einer hohen frequenz auf.

    wozu dient eig das int i ?



  • Kann ich das irgendwie einstellen dass das "gezeichnete" konstant für z.B 10 MilliSekunden auf dem Screen bleibt.


  • Mod

    Nein! Was Du hier machst ist etwas was nicht funktionieren kann.



  • teohasele schrieb:

    bool draw;
         draw = true;
         bool radaron;
         radaron = true;
    

    Und hier habe ich aufgehört zu lesen...


Anmelden zum Antworten