GDI+ Canvas Problem



  • Hallo Forum,
    ich habe derzeit ein Problem mit dem Zeichnen mit der GDI+ Bibliothek.
    Dabei möchte ich mit meinem Programm in das Fenster eines Externen malen.
    Nun funktioniert das malen zwar gut(ich male einen Kreis) doch der Kreis ist ab einer bestimmten Größe abgeschnitten(ragt über den Canvas hinaus),obwohl das Fenster noch größer als den Canvas wäre.
    Hier der Code:

    Gdiplus::Rect rect(0,0,2000,2000);
    	HWND hw = FindWindow(0,Title.c_str());
    	if (hw)
    	{
    		Gdiplus::GdiplusStartupInput gdiplusStartupInput;
    		ULONG_PTR           gdiplusToken;
    
    		
    		GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    		PAINTSTRUCT ps;
    		
    		
    		
    		
    		
    		Gdiplus::Graphics graphic(hw);
    		
    		Gdiplus::Pen pen(Gdiplus::Color::Red,10);
    		
    		//graphic.SetPixelOffsetMode(Gdiplus::PixelOffsetMode::PixelOffsetModeHighQuality); 
    		graphic.SetClip(rect);
    		
    		BeginPaint(hw, &ps);
    		
    		graphic.DrawEllipse(&pen, rect);
    		EndPaint(hw, &ps);
    		
    	}
    	else
    	{
    		std::cout << "Error Window Not Found";
    	}
    

    Ich würde gerne einen Screenshot schicken,aber ich habe scheinbar nicht genügend Rechte
    Danke für eure Antworten !



  • Wo führst du das überhaupt aus? Irgendwann kriegt das andere Fenster eine WM_PAINT Nachricht und malt selber drüber. Unabhängig von deinem konkreten Problem ist das einfach keine gute Idee.



  • @Mechanics sagte in GDI+ Canvas Problem:

    Wo führst du das überhaupt aus? Irgendwann kriegt das andere Fenster eine WM_PAINT Nachricht und malt selber drüber. Unabhängig von deinem konkreten Problem ist das einfach keine gute Idee.

    Das ist kein Problem, da ich diese Funktion in einer Dauerschleife aufrufe.
    Ich versuche einfach eine Art Esp zu machen.
    Dafür muss der Kreis aber in der Mitte zentriert sein was aber nicht möglich ist, da er nicht über den canvas hinausgezeichnet wird.



  • Du könntest es aber zumindest anders machen: Ein eigenes Layered-Fenster/Dialog mit Transparenz über das andere Fenster legen und da hineinzeichnen.
    Das würde mir jetzt auf die Schnelle einfallen. Dann musst du auch nicht unbedingt pollen (kommt natürlich auf die genaue Situation an, die ich nicht kenne).

    Edit: Bzw. mit Fensterregionen arbeiten und die Form entsprechend anpassen.



  • @yahendrik Gute Idee ! Das Esp ist in dem Fall für ein Spiel. Man könnte noch so ne DirectX Hook machen aber das ist für meinen Fall ein regelrechter Overkill.



  • Was meinst du mit Esp? Ich komm grad nicht drauf.



  • @Mechanics Ich wills zwar nicht so nennen weil es nicht so gedacht ist aber ein Art Wallhack !


Log in to reply