Autor Beitrag
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 02.04.06 11:12 
Morgen :)

Hab grade eben versucht, ein Pendant für das Canvas unter Win32 gefunden und bin da auf das ganze Graphics-Zeug gestoßen... nett, was man damit alles machen kann, wenn man weiß wie. Was ich allerdings nicht gefunden habe (wahrscheinlich mangels richtiger Stichwörter bei der Suche) ist ein Pendant zum DoubleBuffering in Win32. Die Anzeige flackert ziemlich bei folgendem Code - gibt's irgendeine Eigenschaft (von Graphics oder sonstwas), die man setzen kann, um das Flackern zu unterbinden?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
    private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
      //Zeichnen...
      Graphics g = panel1.CreateGraphics();
      g.Clear(Color.White);
      if (checkBox1.Checked)
        g.SmoothingMode = SmoothingMode.HighQuality; //AntiAlias
      else
        g.SmoothingMode = SmoothingMode.None;
      Pen p = new Pen(Color.Black, 1);
      Pen p2 = new Pen(Color.Red, 1);
      g.DrawLine(p, panel1.Width / 20, panel1.Width / 2, panel1.Height);
      g.DrawLine(p, 0, panel1.Height / 2, panel1.Width, panel1.Height / 2);
      g.DrawEllipse(p2, panel1.Width / 4, panel1.Height / 4, panel1.Width / 2, panel1.Height / 2);
      if (checkBox1.Checked)
        g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
      else
        g.TextRenderingHint = TextRenderingHint.SingleBitPerPixelGridFit;
      g.DrawString("Test"new Font("Verdana"16), new SolidBrush(Color.Black), 1010);

    }


AXMD
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 02.04.06 12:18 
Hab von GDI+ zwar noch nicht wirklich Ahnung, aber es wird wohl auf das gleiche wie bei TCanvas hinauslaufen:
Zeichne nie direkt auf ein Control :wink: .
AXMD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 02.04.06 12:22 
user profile iconKhabarakh hat folgendes geschrieben:
Hab von GDI+ zwar noch nicht wirklich Ahnung, aber es wird wohl auf das gleiche wie bei TCanvas hinauslaufen:
Zeichne nie direkt auf ein Control :wink: .


Die Frage ist nur, wie sonst darauf zeichnen ;)

AXMD
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 02.04.06 12:28 
Auf irgendetwas Unsichtbares, mit der VCL wäre das TBitmap.
Schau mal bei Codeproject.com nach Double Buffering, da sollte sich Einiges finden lassen.
Als Notlösung gäbe es noch ControlStyles.DoubleBuffered, aber naja...
Codeexplorer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Mo 09.07.07 16:28 
Titel: Tipps und Fragen
:D Hallo Grafikprogrammierer,

ich stehe gerade vor einer ähnlichen Problemstellung wie oben beschrieben.
Außer beim CodeProject "Don't Flicker! Double Buffer!" findet man auch
in der Hilfe unter "Doppelt gepufferte Grafiken" ganz gute Infos.

In einem Punkt bin ich mir aber noch nicht ganz schlüssig:
Auf welchem Hintergrund sollte man denn nun idealerweise Grafiken darstellen?
Ich hatte erst mal an ein Panel gedacht, aber warum ist das double buffering
dort nicht so einfach möglich? (man muss zuerst eine Klasse von Panel
ableiten um an den protected member SetStyle ranzukommen...).
Weiter geht's dann mit den Klassen BufferedGraphicsContext und BufferedGraphics...