Flackern in wxWidgets normal?



  • Mahlzeit!

    Ich möchte mit C++ einen kleinen Editor schreiben und spiele mit dem Gedanken für die GUI wxWidgets zu nehmen. Habe mir gerade wxWidgets2.8.7 installiert und im Ordner "samples" ein paar Anwendungen gestartet. Jetzt muss ich mit Entsetzen feststellen, dass da einige Beispielanwendungen ziemlich flackern beim Resizen des Fensters! Ich nehme mal Beispielhaft die Anwendung "layout". Wenn ich da das Fenster vergrößer, dann flackern ganz massiv alle Labels, der Text in der Statusbar sowie der Text in der Textbox.

    Ich benutze 64bit Vista. Ist dieses derbe Flimmern (beim Resizen) normal in wxWidgets? Wäre nett, wenn einer mit wxWidgets das mal kurz bei sich testen könnten und vllt sogar sagen kann, ob man dagegen was machen kann.

    Danke!


  • Administrator

    1. Falsches Forum, wir haben einen GUI Bereich im Forum.
    2. Hast du schon mal den Windows Explorer in der Grösse geändert und geschaut, was passiert? Aja, genau, alles flackert. Sowas ist ziemlich normal für Windows.
    3. Es gibt ein paar Möglichkeiten dieses Verhalten zu minimieren. Am besten suchst du mal im folgenden Forum nach "flicker":
    http://forum.wxwidgets.org/

    Grüssli



  • Dravere schrieb:

    2. Hast du schon mal den Windows Explorer in der Grösse geändert und geschaut, was passiert? Aja, genau, alles flackert. Sowas ist ziemlich normal für Windows.

    Also ein extremes Flimmern ist nicht normal unter Windows. Mit einem backbuffer kann man das minimieren. Das was dann meistens noch zu sehen ist, ist Tearing.



  • EraseBackground-Event fangen.

    Das Flackern bei wxWidgets kommt meistens daher, das EraseBackground nicht gefangen wird. Dadurch wird beim Neuzeichnen zunächst das Fenster gelöscht (= mit der Hintergrundfarbe angemalt) und dann erst neu gezeichnet -> Flackern



  • Dravere schrieb:

    2. Hast du schon mal den Windows Explorer in der Grösse geändert und geschaut, was passiert? Aja, genau, alles flackert. Sowas ist ziemlich normal für Windows.

    Nö, da flackert garnix. Deine Aussage klingt mir eher nach Windows Bashing. 🙄

    Hm, muss aber wieso flackern denn fertige Komponenten von wxWidgets (wie z.B Label)? Sollte das nicht bereits so implementiert sein, dass da nix flacket (mittels Backbuffering oder was auch immer)? Ist das bei anderen GUI Libs wie QT auch so?



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.

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

    Dieses Posting wurde automatisch erzeugt.


  • Administrator

    Artchi schrieb:

    Also ein extremes Flimmern ist nicht normal unter Windows. Mit einem backbuffer kann man das minimieren. Das was dann meistens noch zu sehen ist, ist Tearing.

    sebi77 schrieb:

    Nö, da flackert garnix.

    Verwendet ihr einen anderen Windows Explorer? o..0
    Also wenn ich meinen Windows Explorer, mit der Treeview darin, in der grösse ändere, dann flackert bei mir der Baum ganz eindeutig und stark. Auch bei den Angaben in der Statusleiste ist ein klares Flackern zu erkennen.

    sebi77 schrieb:

    Deine Aussage klingt mir eher nach Windows Bashing. 🙄

    Na toll, da verteidigt man jahrelang Windows gegen Mac und Linux und am Ende wird man des Windows Bashing bezeichnet. Dankeschön ...

    @Artchi,
    Meinst du nicht eher Doppelbufferung, bzw. double buffering? Habe noch nie den Ausdruck Backbuffering gehört. Aber wenn ich mir den Sinn so überlege, ist es wahrscheinlich das Gleiche. Also reine Frage aus Interesse 🙂

    Grüssli


  • Mod

    Das kommt auch durch die Sizer, die das Layout des Fensters während dem Vergrößern anpassen.
    Das kann man aber auch abstellen, z.b. flackert in Codeblocks garnix, obwohl das ja 100% wxWidgets ist.



  • phlox81 schrieb:

    Das kann man aber auch abstellen

    Weißt du zufällig auch wie?


  • Mod

    Einer der Gründe ist, das sich die Controls jeweils neuzeichnen, wenn sie größer werden.
    D.h. mit jedem mal wo OnSize aufgerufen wird, werden die Größen der Controls angepasst.
    Das löst auch das neuzeichnen aus, da die Controls ja "wachsen".

    Kann sein das man über OnSize da was drehen kann, aber es gibt leider nicht sowas wie Sizestart oder Sizeend.



  • Dravere schrieb:

    Verwendet ihr einen anderen Windows Explorer? o..0
    Also wenn ich meinen Windows Explorer, mit der Treeview darin, in der grösse ändere, dann flackert bei mir der Baum ganz eindeutig und stark. Auch bei den Angaben in der Statusleiste ist ein klares Flackern zu erkennen.

    WIe du schon sagst, das Flackern ist nur im Treeview. Es ist also in dem Fall nur diese bestimmte Komponente. Wahrscheinlich weil die Tree-Daten beim Resize immer wieder aktualisert werden. Keine Ahnung, aber ich habe in meinen Win32-GUIs das Flackern abgestellt bekommen.

    Dravere schrieb:

    @Artchi,
    Meinst du nicht eher Doppelbufferung, bzw. double buffering? Habe noch nie den Ausdruck Backbuffering gehört. Aber wenn ich mir den Sinn so überlege, ist es wahrscheinlich das Gleiche. Also reine Frage aus Interesse 🙂

    Double Buffering sagt das es zwei Buffer sind, einer davon ist ja im Hintergrund unsichtbar. Es gibt ja auch Tripple Buffering, sind zwei Buffer unsichtbar.

    Backbuffer ist der allgemeine Begriff, der aber doppelt, dreifach etc. sein kann. Frontbuffer ist der, den man sieht.



  • Irgendwie helfen mir Aussagen wie "kann sein, dass man da was drehen kann" oder "probiers mal mit double buffering" nicht so sehr weit als totalen Anfänger in wxWidgets.

    Ich frag mal KONKRET: Am meisten stört mich das extreme Flackern der ganzen Labels. Was kann ich dagegen KONKRET machen? (am besten mit bissi Code)

    PS: hab grade den Explorer auf meinem XP Notebook getestet. Ja, der flackert auch stark rum. Aber auf meinem Vista PC flackert im Explorer wirklich nichts.



  • GDIPLUS aktivieren !
    Das nutzt die schnelleren MFC-Funktionen, statt die wxGeneric-Implementierung.



  • nurf schrieb:

    GDIPLUS aktivieren !
    Das nutzt die schnelleren MFC-Funktionen, statt die wxGeneric-Implementierung.

    Wie geht das? Eine suche nach "GDIPLUS wxWidgets" ergab absolut garnichts.



  • USE_GDIPLUS
    zu finden in der setup.h


Anmelden zum Antworten