Flackern verhindern



  • Hallo,
    ich erstelle mit CreateDialog einen Dialog den ich zuvor im Ressourcen Editor angelegt habe.

    Jetzt ist es so das beim Resize des Fensters dieser Dialog extrem Flackert. Was kann ich tun.
    Hab zwei mögliche Lösungen gefunden, weiß aber nicht wie ich es machen soll.

    1. WS_CLIPCHILDREN
    Aber wo soll ich den Style übergeben? CreateDialog erwartet keinen Style Parameter.

    2. Double Buffer
    Da gehts irgendwie um den Device Context, da kenn ich mich nicht so gut aus. Kann mir jemand einen Tipp geben

    Bitte nur Vorschläge in C nicht C++



  • Tut mir leid das der Beitrag jetzt viermal drin ist. Hatte Problem mit der Internet Verbindung.


  • Mod

    Double Buffering hat hier nichts mit zu tun.

    WS_CLIPCHILDREN muss im Parent gesetzt werden.



  • Habs im Parent gesetzt. Ändert aber nichts Flackert immer noch.



  • Ich glaub ich muss WS_CLIPCHILDREN auch dem Dialog mitgeben.
    Weiß jemand wie das geht.

    Vielleicht mit SendMessage(dialog, WS_CLIPCHILDREN ...);
    Wie muss die Syntax richtig heißen?



  • WS = WindowStyle != WM = WindowMessage

    🙂 -> sendmessage fehl am platz
    guck in deiner resourcen datei wo vom dialog noch andere WS_ konstanten stehen dort einfach einfügen.



  • Danke für den Tipp.
    Habs auch gemerkt:

    style = GetWindowLong(hwnd, GWL_STYLE) | WS_CLIPCHILDREN;
    SetWindowLong(hwnd, GWL_STYLE, style);

    So funktionierts und es ist flacker frei.
    Nur noch ein kleines Problem. Hab ein Groub-Box-Control auf meinem Dialog und dessen Hintergrund wird nicht mehr neu gezeichnet. Was nun



  • Weiß jemand Rat?

    Flackern der Steuerelemente auf dem Dialog ist weg. Meine GroupBox welche sich jedoch auch auf dem Dialog befindet zeichnet sich jetzt nicht mehr neu. Wenn ich im Ressourcen Editor den GroupBox Hintergrund auf Transparent setze passt der Hintergrund wieder. Jedoch Flackert dann die GroupBox beim Resize?
    Jetzt bin ich in der Zwickmühle. Kann mich entscheiden zwischen Flackern oder nicht gezeichneten Hintergrund.

    Kann ich vielleicht bei WM_ERASEBKGND den Hintergrund manuell zeichnen?


  • Mod

    Das Problem ist, dass sich die Groupbox mit den anderen Controls überlagert. Es wundert also nicht, das hier ein Konflikt entsteht.

    Du kannst versuchen die Z-Order anzupassen. Also die Reihenfolge der Boxen.
    Dirty Trick: Vor dem Resize, die Groupboxen auf Visible setzen und dann wieder einblenden. (Kann hefen).



  • Wie soll ich die Z-Order ändern.
    Ich hab kein Handle der GroupBox. Ich wollte die GroupBox ohne Code also nur im Ressourcen Editor erstellen.



  • Sisko86 schrieb:

    Ich hab kein Handle der GroupBox.

    Hi,

    HWND GetDlgItem
    (
    HWND hDlg, // handle of dialog box
    int nIDDlgItem // identifier of control
    );

    Könnte dabei abhilfe schaffen 😉


  • Mod

    Dann ist es die Tab-Reihenfolge, die Du veränderst...


Anmelden zum Antworten