Mal wieder ein Flackern am Bildschirm!



  • Zeige mal Code. Mit Flackern kenne ich mich ein wenig aus, würde ich mal behaupten. 😉



  • Also hier erstmal meinen Code. ich hab ihn aber noch um gebaut jetzt nur noch ein Rechteck das die farbe ändert. und schon mal vielen dank für die mühe.

    void CReaktionszeitDlg::OnButtonStart() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    	UpdateData(true);
    	int nInt = atoi(m_sZeit);
    	SetTimer(ID_TIMER, nInt ,NULL);
    
    }
    
    void CReaktionszeitDlg::OnTimer(UINT nIDEvent) 
    {
    	// TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen
    	zeichen();
    	CDialog::OnTimer(nIDEvent);
    }
    
    void CReaktionszeitDlg::zeichen()
    {
    	UpdateData(true);
    
    	CClientDC dc(this);	
    	//CRect GrundRechteck(300,300,400,400);
    	CRect HinterRechteck(200,200,700,500);
    	if(m_ni%2){
    
    		m_Hintergrundfarbe = RGB(m_nHinterRot,m_nHinterGruen,m_nHinterBlau);
    		dc.FillSolidRect(HinterRechteck,m_Hintergrundfarbe);
    	}else{
    
    		m_Grundfarbe= RGB(m_nGrundRot, m_nGrundGruen,m_nGrundBlau);
    		dc.FillSolidRect(HinterRechteck,m_Grundfarbe);
    	}
    	m_ni++;
    
    	//UpdateData(false);
    }
    

    und hier der link zu dem anderem Beitrag:

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-3073.html



  • Versuch mal:

    void CReaktionszeitDlg::zeichen()
    {
        CClientDC dc(this);    
        //CRect GrundRechteck(300,300,400,400);
        CRect HinterRechteck(200,200,700,500);
        if(m_ni%2){
    
            m_Hintergrundfarbe = RGB(m_nHinterRot,m_nHinterGruen,m_nHinterBlau);
            dc.FillSolidRect(HinterRechteck,m_Hintergrundfarbe);
        }else{
    
            m_Grundfarbe= RGB(m_nGrundRot, m_nGrundGruen,m_nGrundBlau);
            dc.FillSolidRect(HinterRechteck,m_Grundfarbe);
        }
        m_ni++;
    
        Invalidate(false);
    }
    

    Vielleicht hilft das schon ein wenig.



  • danke für den tipp aber leider flackert es damit immer noch.



  • Hm, vielleicht solltest du aber auch wie üblich, das Zeichnen auch OnPaint() bzw. OnDraw() überlassen.

    Das heisst, du schreibst:

    void CReaktionszeitDlg::OnButtonStart() 
    {
        // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
        UpdateData(true);
        int nInt = atoi(m_sZeit);
        SetTimer(ID_TIMER, nInt ,NULL);
    
    }
    
    void CReaktionszeitDlg::OnTimer(UINT nIDEvent) 
    {
        // TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen
        Invalidate(false);    // zeichen();
        CDialog::OnTimer(nIDEvent);
    }
    
    void CReaktionszeitDlg::OnPaint()
    {
        CPainzDC dc(this);    
        //CRect GrundRechteck(300,300,400,400);
        CRect HinterRechteck(200,200,700,500);
        if(m_ni%2){
    
            m_Hintergrundfarbe = RGB(m_nHinterRot,m_nHinterGruen,m_nHinterBlau);
            dc.FillSolidRect(HinterRechteck,m_Hintergrundfarbe);
        }else{
    
            m_Grundfarbe= RGB(m_nGrundRot, m_nGrundGruen,m_nGrundBlau);
            dc.FillSolidRect(HinterRechteck,m_Grundfarbe);
        }
        m_ni++;
    }
    


  • nein damit geht es auch nicht. aber danke nochmal



  • Sieh dir das einmal an. Absolut einfach zu verwenden und nie wieder flackerts.
    http://www.codeproject.com/gdi/flickerfree.asp
    Kurt



  • Dort nutzen die auch den Back-/Doubblebuffer.
    Manchmal ist das ja aber gar nicht notwendig. Daher ist dann die Frage, wie man selbst Flackern definiert. Ist es stark am flackern oder oder eher ab und zu?
    Ich wollte es ihm ohne DB zeigen.



  • Also ich hab es versucht und meiner meinung auch alles so verändert wie es auf der homepage stand, aber es flackert immer noch 😞 !!!

    Vielleicht könnt ihr ja noch mal drüber schauen.

    // Reaktionszeit1_1View.cpp : Implementierung der Klasse CReaktionszeit1_1View
    //
    
    #include "stdafx.h"
    #include "Reaktionszeit1_1.h"
    
    #include "Reaktionszeit1_1Doc.h"
    #include "Reaktionszeit1_1View.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // CReaktionszeit1_1View
    
    IMPLEMENT_DYNCREATE(CReaktionszeit1_1View, CView)
    
    BEGIN_MESSAGE_MAP(CReaktionszeit1_1View, CView)
    	//{{AFX_MSG_MAP(CReaktionszeit1_1View)
    	ON_WM_TIMER()
    	ON_WM_ERASEBKGND()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CReaktionszeit1_1View Konstruktion/Destruktion
    
    CReaktionszeit1_1View::CReaktionszeit1_1View()
    {
    	// ZU ERLEDIGEN: Hier Code zur Konstruktion einfügen,
    
    }
    
    CReaktionszeit1_1View::~CReaktionszeit1_1View()
    {
    	//KillTimer(ID_TIMER);
    }
    
    BOOL CReaktionszeit1_1View::PreCreateWindow(CREATESTRUCT& cs)
    {
    	// ZU ERLEDIGEN: Ändern Sie hier die Fensterklasse oder das Erscheinungsbild, indem Sie
    	//  CREATESTRUCT cs modifizieren.
    
    	return CView::PreCreateWindow(cs);
    }
    
    /////////////////////////////////////////////////////////////////////////////
    // CReaktionszeit1_1View Zeichnen
    
    void CReaktionszeit1_1View::OnDraw(CDC* dc)
    {	
    	CMemDC pDC(dc);
    	CReaktionszeit1_1Doc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	// ZU ERLEDIGEN: Hier Code zum Zeichnen der ursprünglichen Daten hinzufügen
    
    	CRect HinterRechteck;
    	GetClientRect(HinterRechteck);
    	if(m_ni%2){
    
    		m_Hintergrundfarbe = RGB(0,0,0);
    		pDC->FillSolidRect(HinterRechteck,m_Hintergrundfarbe);
    	}else{
    		//pDC->SetBkMode(TRANSPARENT);	
    		m_Grundfarbe= RGB(255, 0,0);
    		pDC->FillSolidRect(HinterRechteck,m_Grundfarbe);
    	}
    	m_ni++;
    }
    
    /////////////////////////////////////////////////////////////////////////////
    // CReaktionszeit1_1View Diagnose
    
    #ifdef _DEBUG
    void CReaktionszeit1_1View::AssertValid() const
    {
    	CView::AssertValid();
    }
    
    void CReaktionszeit1_1View::Dump(CDumpContext& dc) const
    {
    	CView::Dump(dc);
    }
    
    CReaktionszeit1_1Doc* CReaktionszeit1_1View::GetDocument() // Die endgültige (nicht zur Fehlersuche kompilierte) Version ist Inline
    {
    	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CReaktionszeit1_1Doc)));
    	return (CReaktionszeit1_1Doc*)m_pDocument;
    }
    #endif //_DEBUG
    
    /////////////////////////////////////////////////////////////////////////////
    // CReaktionszeit1_1View Nachrichten-Handler
    
    void CReaktionszeit1_1View::OnTimer(UINT nIDEvent) 
    {
    	// TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen
    	Invalidate(); 
    	CView::OnTimer(nIDEvent);
    }
    
    BOOL CReaktionszeit1_1View::OnEraseBkgnd(CDC* pDC) 
    {
    	// TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen
    
    	return FALSE;
    }
    
    void CReaktionszeit1_1View::OnInitialUpdate() 
    {
    	CView::OnInitialUpdate();
    	srand( (unsigned)time( NULL ) );
    	SetTimer(101,10,NULL);
    
    	// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    
    }
    
    void CReaktionszeit1_1View::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
    {
    	// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    	pDC->SetBkColor(RGB(0, 0, 0));
    	CView::OnPrepareDC(pDC, pInfo);
    }
    


  • Ich denke OnEraseBkgnd() sollte > 0 zurückgeben.
    Kurt



  • nein des ist es auch nicht. hab ich auch schon versucht



  • mh, funktioniert eigentlich sehr gut, doch warum zeigt es mir keine bilder mehr an wenn ich sie vorher so anzeigen konnte?

    CDC MemDC_AUFL;
    MemDC_AUFL.CreateCompatibleDC(pDC);
    
    CBitmap *BmpPrevious = MemDC_AUFL.SelectObject(&bitmap_2wAuflager_0);
    pDC->BitBlt(pp1->get_x()-24,pp1->get_y()-24,49,49,&MemDC_AUFL,0,0,SRCCOPY);
    pDC->SelectObject(BmpPrevious);
    

    danke für eure hilfe

    EDIT:
    Frage hat sich erübrigt: hab etwas gefunden und lade das Bild nun anders.

    Gruss



  • Hat noch jemand einen tipp für mich???
    Bin absolut ratlos!!


Anmelden zum Antworten