JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=15a4ead99c29b0927b8595305b47b6b9Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

MFC - Flimmer-Freies Zeichnen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 27.09.2003, 11:30    Titel: MFC - Flimmer-Freies Zeichnen Antworten mit Zitat

Hallo allerseits,

Ich hab' da ein kleines Problem mit Visual C++ 6.0 und MFC.
Ich habe einen Timer, der alle 100 Millisekunden eine MyDraw-Prozedur aufruft, welche das ganze Dialogfeld (ausgenommen das Menü und der Fensterrahmen) "bemalt"!

Dann habe ich die OnPaint-Prozedur so eingerichtet, dass sie bei Bedarf (also wenn das Fenster nicht gerade minimiert ist) zusätzlich die MyDraw-Prozedur aufruft.

Der Fenster-Inhalt wird beim bewegen des Fensters angezeigt (Win XP) und alles wird schön neugezeichnet.

Nun zu meinem Problem:
Wenn ich das Fenster jedoch ein bisschen außerhalb des Bildschirms bewege (Sprich: unter die Taskleiste schiebe. Ich nenne es "In die Farbe eintauchen."Wink), dann gibt es beim herausziehen des Fensters aus diesem Bereich ein unschönes flackern!
Und zwar sieht man, wie für einen kurzen Moment die Standard Hintergrundfarbe erscheint (grau) und anschließend mit der Bitmap übermalt wird.

Wie kann ich dieses Flackern elegant beseitigen, ohne die Systemauslastung überzustrapazieren?

Ich habe schomn ein wenig mit der Funktion OnEraseBkgnd probiert, doch bisher ohne Erfolg.
Entweder fängt mein Computer in extrem an zu stocken, oder es flimmert und man sieht den Bildaufbau!

Ich hoffe ihr könnt mir mit eurem unendlichen Wissen helfen. Very Happy

p.s. Ich habe schon eine Art BackBuffer. Das heißt meine ganzen Grafikobjekte werden zunächst auf einen MemDC geblittet und anschließen wird dieser MemDC auf den Bildschirm augegeben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 27.09.2003, 15:37    Titel: Antworten mit Zitat

Das Problem ist soweit so gut gelöst! Very Happy

Hier der Code...

Timer ruft alle 100 Millisekunden diese Prozedur auf:
m_theTetris.MyDraw(&dc);

OnPaint sieht so aus:
Code:
void CTetrisDlg::OnPaint()
{
   CPaintDC dc(this); // Gerätekontext für Zeichnen
   
   if (IsIconic())
   {
   

      SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

      // Symbol in Client-Rechteck zentrieren
      int cxIcon = GetSystemMetrics(SM_CXICON);
      int cyIcon = GetSystemMetrics(SM_CYICON);
      CRect rect;
      GetClientRect(&rect);
      int x = (rect.Width() - cxIcon + 1) / 2;
      int y = (rect.Height() - cyIcon + 1) / 2;

      // Symbol zeichnen
      dc.DrawIcon(x, y, m_hIcon);
   }
   else
   {   
      m_theTetris.UpdateFrontBuffer(&dc); //Das Fenster wird aktualisiert!
      CDialog::OnPaint();
   }
}


Und OnEraseBkgnd sieht so aus:
Code:
BOOL CTetrisDlg::OnEraseBkgnd(CDC* pDC)
{
   return TRUE;    // Kein Zeichnen der BUTTONFACE-Farbe auf das Fenster nötig!
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum