Direct2D und das HwndRenderTarget



  • Moin zusammen!

    Ich arbeite in einer kleinen Softwareschmiede und wir überlegen nun, vom Zeichnen über GDI auf Direct2D umzusteigen und ich soll mir das Ganze mal anschauen. Wir programmieren mit der MFC und C++ im VisualStudio.

    Als Beispiel habe ich mir einen Dialog ausgesucht, der bisher folgendes gemacht hat: Der Dialog hat ein Control, welches als Vorschaufenster benutzt wurde. Dort hat der Dialog etwas reingezeichnet.

    Jetzt versuche ich, dieses Zeichnen auf Direct2D um zu schreiben, scheitere aber wohl schon an diesem HwndRenderTarget. Das erwartet ein Hwnd und die Size in Pixel. Was muss ich dort übergeben? Wenn ich mir über GetDlgItem(ID)->m_hWnd das Hwnd abhole und die Größe und das übergebe, sehe ich im Dialog rein gar nichts. Wenn ich allerdings this->m_hWnd nehme, also das Hwnd vom Dialog selber), dann passiert zwar etwas, aber auch nicht das richtige 🙂
    Ich habe einfach mal ein

    m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));

    gemacht, um was zu sehen. Mit dem Hwnd vom Dialog wird der Hintergrund vom ganzen Fenster weiß. Wenn ich das Hwnd vom Control nehme, passiert nichts. Anschließend sollte erstmal nur ein rotes Rechteck gezeichnet werden, aber das sehe ich weder in der einen, noch in der anderen Variante...

    Hat einer ne Idee, was ich falsch mache? Die MSDN hilft mir auch nicht wirklich wieter...

    Danke für jeden Tipp 🙂

    Gruß Tobi



  • Ok, hab meinen Fehler gefunden bzw. es funktioniert jetzt einigermaßen:
    Als hWnd muss der Dialog genommen werden. Ich hatte nur noch die falsche Größe angegeben, die vom Control und nicht die vom Dialog. Jetzt zeichnet er es mehr oder weniger korrekt. Allerdings sieht das gezeichnete etwas unscharf aus, aber da muss ich wohl mit den StrokeStyles rumspielen.

    Allerdings gibt es jetzt ein neues Problem:

    Der Dialog wird einmal korrekt gezeichnet mit den Buttons und der Vorschau und dann wird aber nochmal drüber gezeichnet bzw. er cleared den Dialog nochmal mit der eingestellten Farbe und zeichnet die Vorschau. Dabei übermalt er mir aber sämtliche Controls. Wenn ich mit der Maus rumfahre, dann taucht es wieder auf (nur die Labels bleiben weiterhin unsichtbar). Wenn ich das Clearen nicht mache, ist der Dialog komplett schwarz im Hintergrund...

    Hat hier jemand eine Idee, woran das liegen könnte?


Anmelden zum Antworten