Laden...

Transparentes Control Doublebuffered

Erstellt von stef vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.328 Views
S
stef Themenstarter:in
31 Beiträge seit 2007
vor 16 Jahren
Transparentes Control Doublebuffered

Hallo,

ich zeige ein Bild auf einem Panel an. Darüber habe ich ein transparentes Control gesetzt auf dem ich zeichne (wie MSPaint). Das funktioniert eigentlich ganz gut, nur flackern die Zeichnungen sehr, wenn ich zeichne.

Ich habe schon alles mögliche versucht wie OptimizedDoubleBuffer und den DoubleBuffer "manuell" zu steuern.

Allerdings hat das alles nicht funktioniert. Der OptimizedDoubleBuffer von .NET führt zu einem schwarzen Bildschirm.

Hat jemand Erfahrungen damit?

Danke und Gruss

S
709 Beiträge seit 2005
vor 16 Jahren

Hallo stef!

Mhm, warum zeichnest du nicht gleich das Panel? 😉

vg,
Simon

S
stef Themenstarter:in
31 Beiträge seit 2007
vor 16 Jahren

Es gibt Gründe warum ich nicht direkt in das Panel zeichne 🙂

Es wäre aber echt gut wenn jemand einen Tip hat wie man bei einem transparenten Control DoubleBuffering aktivieren kann bzw. auf anderem Wege das Flackern verringern.

Gruss

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo stef,

hast du DoubleBuffer für Panel und Control gesetzt?

Es gibt Gründe warum ich nicht direkt in das Panel zeichne

Bist du dir sicher, dass die stichhaltig sind? 🙂

herbivore

795 Beiträge seit 2006
vor 16 Jahren

In der MSDN ist ein Bug dokumentiert, der besagt, dass DoubleBufer und Transparenz nicht miteinander arbeiten können (oder so ähnlich) --> geht also nicht.

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
S
stef Themenstarter:in
31 Beiträge seit 2007
vor 16 Jahren

Erstmal danke für die Antworten. den Beitrag in der msdn hab ich auch gelesen. Transparenz und DoubleBuffer funktioniert nicht. Allerdings ist da nur der interne DoubleBuffer gemeint (also mit SetStyle())

Man kann aber zum Beispiel das DoubleBuffering selbst in die Hand nehmen

siehe: http://www.codeproject.com/KB/graphics/DoubleBuffering.aspx?df=100&forumid=262139&exp=0&select=1393574

Leider kam ich damit auch noch nicht wirklich weiter. Vielleicht hat ja jemand noch einen Trick auf Lager 🙂

Gruss

795 Beiträge seit 2006
vor 16 Jahren

Also bei mir tut der Code von Codeproject einwandfrei. Was hast du damit für Probleme?

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
S
stef Themenstarter:in
31 Beiträge seit 2007
vor 16 Jahren

Welche Version von dem CodeProject Code hast du denn verwendet? Den für .NET1.1 oder .NET2.0 ?

Hast du ein transparentes Panel auf dem zu Zeichnest? Also ich zeichne wie in MSPaint Freihand oder Linien etc...

Bei mir wird mit der manuellen Lösung während ich zBsp. eine Linie zeichne die vorherigen Linien bei manuellem DoubleBuffer nicht überzeichnet, weil sie ja immernoch auf dem Bitmap gezeichnet sind, das später wieder angezeigt wird.

Gruss

2.921 Beiträge seit 2005
vor 16 Jahren

Der OptimizedDoubleBuffer von .NET führt zu einem schwarzen Bildschirm.

Wie setzt du denn den DoubleBuffer?

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

S
stef Themenstarter:in
31 Beiträge seit 2007
vor 16 Jahren

this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer, true);
this.UpdateStyles();