Nach dem Minimieren die Grafik wieder anzeigen.



  • Ich hab mit Hilfe von DirectX und dem DC Grafiken und Schriften anzeigen lassen.

    Wenn ich das Programm(Fullscreenanwendung) jetzt minimiere und dann wieder maximiere,dann wird keine Grafik mehr angezeigt.

    Wie löst man dieses Problem?



  • Hab lang nix mehr mit DirectX gemacht, aber es kann sein, dass deine Grafiken aus dem (Grafikkarten-) Speicher gelöscht werden wenn das Programm minimiert wird.
    Entsprechende Funktionen sollten dann Fehler a lá SURFACE_LOST oder so zurückgeben. Du musst dann die Grafiken neu einladen.
    Aber bin mir kein Stück sicher, aber bevor niemand antwortet^^



  • Das wäre natürlich eine möglichkeit.

    Kennst du eine Windows Message,die mein Programm nur dann empfängt,wenn ich es wieder maximiere?

    Ich will das alles ja nur in diesem Fall neuladen.

    EDIT: Hab grad herausgefunden,dass das nicht alles sein kann.
    Die teile die ich mit dem GDI zeichne werden immer neugezeichnet und sie werden trotzdem nicht angezeigt.
    Und auch ein Neuladen der Grafiken in den Speicher ändert nichts.



  • Zeichnest du mit GDI direkt in den Fenster-DC oder einen DirectX Surface ?
    und: Zeichnest du nur bei WM_PAINT oder ständig neu ?

    Vermutlich wissen die Leute im Spieleprogrammierung-Board-Teil hier mehr 😉



  • Dieser Thread wurde von Moderator/in flenders aus dem Forum WinAPI in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich zeichne in eine DirectX Surface und es wird ständig neu gezeichnet ohne WM_PAINT.



  • Teste den Status deines Devices mit IDirect3DDevice9::TestCooperativeLevel() das gibt dir den Status deines Devices zurück, wenn der D3DERR_DEVICELOST oder D3DERR_DEVICERESET ist, dann musst du das Device zurücksetzen mit IDirect3DDevice9::Reset() und anschließend wieder prüfen, normalerweise gehts dann, aber wenn wieder D3DERR_DEVICELOST kommt, dann ist das Device wirklich verloren, da bleibt dir dann nur noch die Anwendung zu beenden.
    Wie du das ganze am besten absicherst kannst du im DXUT Framework sehen und zwar in der Funktion DXUTRender3DEnvironment9 in der dxut.cpp im SDK.



  • Geht das auch irgendwie mit DirectDraw?

    Das sind reine 2D Grafiken und Direct3D wollte ich da jetzt nicht reinbauen.

    Da muss es doch irgendeine gängige Technik geben,denn es werden ja bei allen Programmen auf der Welt die Grafiken neugezeichnet.



  • Dann nimmst einfach IDirectDraw::TextCooperativeLevel.

    Edit:
    Der Link ist für die Embedded Version, die erscheinen aus irgendwelchen Gründen in letzter Zeit immer vor den Win32 Versionen und da vergess ich meistens zu kontrollieren.
    Aber die Funktion gibts auch für die normale Version.



  • Also ich habe das immer so gemacht. Alles wieder runtergefahren und neugeladen. Dazu hatte ich auch einen ImageManager. Dieser verwaltete die DirectDrawSurface und konnte, wenn es sein musste, die Liste durchlaufen und alles wieder neu laden.


Anmelden zum Antworten