Wie Style aus Control entfernen



  • Guten Morgen,

    ich habe in meinem Hauptfenster mehrere Childfenster bestehend aus Listview, Treeview, Toolbar und Tabcontrol. Um beim Resizen des Hauptfensters das flickern der Childs zu unterdrücken, habe ich erfolgreich folgende Methoden angewand:

    - WS_CLIPCHILDREN für das Hauptfenster
    - DeferWindowPos für alle Childfenster
    - entfernen des Class-Styles "CS_HREDRAW | CS_VREDRAW" aus dem Hauptfenster

    Meine Anwendung ist jetzt nahezu flickerfrei, einzig die Tab-Control flickert noch. Ich habe da jetzt mal mit WinSpy++ nachgeschaut und festgestellt, daß die Tab-Control nach wie vor die Class-Styles "CS_HREDRAW | CS_VREDRAW" besitzt. Meine Frage nun wie kann ich diese Syles ausschalten, bzw. entfernen? Ich denke danach habe ich meine Anwendung 100% flickerfrei beim Resizen.


  • Mod

    Besorge Dir das Handle und versuch mal SetClassLong, GCL_STYLE.

    Man kann Class-Styles IMHO nicht für ein Control ausschalten. Allerdings habe ich SetClassLong noch nie ausprobiert.
    Die Stile sind eben in der Fensterklasse und nicht im Fenster verankert. Manchmal verlässt sich ein Fenster ja auch darauf, dass bestimmte Dinge passieren... 😉



  • Ich habs jetzt anderst gelöst:

    Mit GetClassInfoEx eine WNDCLASSEX Stuktur mit den Informationen der originalen Tab-Control füllen, dann die Members cbSize, style und lpszClassName mit neuen Informationen füllen. Die Struktur nun wieder mit RegisterClassEx registrieren und schon habe ich eine Kopie der original Klasse jedoch mit entfernten Class-Style "CS_HREDRAW | CS_VREDRAW" und die Klasse hat jetzt einen anderen Namen. Nun kann ich eine Tab-Controll Fenster mit dieser Klasse erzeugen. Das flickern ist nun übrigens weg.


  • Mod

    Das ist mit Abstand der beste Weg! 👍

    Mir war nicht klar, dass Du selbst dieses Tab-Ctrl erzeugst. Wenn das System es z.B. in einem Property-Sheet erzeugt müsstest Du ja anders vorgehen.


Anmelden zum Antworten