Problem mit Window Background



  • @Swordfish sagte in Problem mit Window Background:

    Zieh ein anderes Fenster drüber und stelle dabei fest daß der Hintergrund deines Fensters nicht neu gezeichnet wird. Daß er Anfangs Weiß ist, tjoa.

    Probier das mal mit Windows 10 (=DWM per Default immer aktiv). Da passiert das nämlich nicht mehr. Da hat jedes top-level Fenster seinen eigenen, unabhängigen Puffer. Dadurch entfällt auch das ganze lästige, flackerige Neuzeichnen von Fenstern wenn man andere Fenster "drüberzieht".



  • @hustbaer nice to know. Aber das Prinzip bleibt das selbe. Keine Brush für den Bgnd = selbst zeichnen.



  • @hustbaer Die ganzen Buffer der Windows werden dann vom DWM zum Framebuffer zusammencomposiert und der wird ausgegeben? Und wenn man Background = NULL; schreibt erkennt Windows das und nimmt bei mir weiss als default?

    Angenommen ich verwende Swapchain von DirectX? Dann wird auch wieder dem DVM über eine Ecke gesagt er soll mein Window mit swappen?



  • @CUser1 sagte in Problem mit Window Background:

    @hustbaer Die ganzen Buffer der Windows werden dann vom DWM zum Framebuffer zusammencomposiert und der wird ausgegeben?

    Ja. In DirectX-Sprech hast du quasi pro Fenster eine Render-Texture, und der DWM malt die ganzen Texturen der Fenster dann in den Back-Buffer und flippt den dann auf den Schirm.

    Und wenn man Background = NULL; schreibt erkennt Windows das und nimmt bei mir weiss als default?

    Nö. Wenn du Background = NULL schreibst dann malt dir Windows einfach keinen Hintergrund. Das Fenster bekommt aber trotzdem einen Buffer. Und dieser Buffer muss halt irgendeinen initialen Zustand haben. Und dieser initiale Zustand ist scheints weiss. Unabhängig davon was für ein Background Brush Handle du verwendest. Und wenn du dann Background = NULL machst und in bestimmte Bereiche nie selbst zeichnest, dann bleiben diese Bereiche halt einfach weiss.

    Angenommen ich verwende Swapchain von DirectX? Dann wird auch wieder dem DVM über eine Ecke gesagt er soll mein Window mit swappen?

    Wie das im Windowed-Mode läuft weiss ich ehrlich gesagt nicht. Im Fullscreen Mode wird aber soweit ich weiss dem DWM die Kontrolle geklaut, und die Swapchain deines Programms dann direkt verwendet.



  • Ok ich verstehe, also bedeutet Background = NULL; soviel wie ZeroMemory(backbuffer,sizeof(backbuffer));



  • @CUser1 sagte in Problem mit Window Background:

    Ok ich verstehe, also bedeutet Background = NULL; soviel wie ZeroMemory(backbuffer,sizeof(backbuffer));

    Nein.

    Background = NULL bewirkt dass Windows nicht für dich den Hintergrundbereich des Fensters anmalt (im Puffer für das Fenster).

    Das Initialisieren des Puffers mit einer einheitlichen Farbe (Weiss) davor wird mit an Sicherheit grenzender Wahrscheinlichkeit immer gemacht, egal was du als Background angibst.



  • @hustbaer Ja eh und bei dem immer machen wird der Buffer initialisiert mit ZeroMemory einfach mal sicherheits halber meinte ich. Aber in der Windows Seite nicht in der App.



  • @CUser1 Ja. Das hast du bloss vorhin nicht so geschrieben. Und ZeroMemory wird es auch nicht sein, weil das wäre eher Schwarz 😉



  • Und das gilt nur für wenn DWM aktiv ist, und ist ziemlich sicher auch nirgends garantiert. Das einzige was garantiert ist, ist dass Windows den Hintergrundbereich deines Fensters nicht anmalt wenn du NULL als background brush angibst. Und wenn du einen definierten Hintergrund haben willst, dann musst du ihn in dem Fall selber anmalen. Ob jetzt über DirectX oder sonstwie.



  • @hustbaer Dann ist eh alle gut ich dachte mir sonst zeichne ich ständig über den weißen Hintergrund drüber und es flackert dann vielleicht sogar.


Log in to reply