Zeichnen mit MFC



  • Ich bewege über einen Timer eine Ellipse in einer dialogfeldbasierenden Anwendung von Links nach rechts. Der Bereich den die Ellipse durchschreitet ist hinterher schwarz. Wie kommt das ?



  • Servus,

    du solltest nachdem du deine Elipse bewegt hast deinen Dialog neuzeichnen lassen. Dann wäre das damit behoben....
    Nur die beste Lösung ist das glaube ich nicht. 😃

    Hellsgore



  • Also, was ich so gesehen habe, sieht alles, was sich bei dialogbasierten Anwendungen bewegt zum ****** aus.

    Kenne das noch aus alten QBasic DOS-Zeiten :D.



  • Wenn ich den Dialog neu zeichen lasse flimmert alles..
    Ist wohl vermutlch besser wenn ich eine SDI Anwendung hierführ schreibe !?



  • SDI:

    void CRechtView::OnDraw(CDC* pDC)
    {
    	CRechtDoc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	// ZU ERLEDIGEN: Hier Code zum Zeichnen der ursprünglichen Daten hinzufügen
    
    	if (bRect) {
    		CBrush brush(RGB (255, 0, 0));
    		//CBrush *oldbrush = pDC->SelectObject(&brush); 			 
    		pDC->SelectObject(&brush);
    		pDC->Rectangle(&rect);
    	}
    
    }
    
    //Menüauswahl
    void CRechtView::OnStartMovement() 
    {
    	SetRect();
    	SetTimer (1, 10, NULL );	
    }
    
    //Menüauswahl
    void CRechtView::OnStopMovement() 
    {
    	KillTimer(1);
    }
    
    VOID CRechtView::SetRect()
    {
    	rect.left = 10;
    	rect.top = 10;
    	rect.bottom = 40;
    	rect.right = 80;
    	bRect = TRUE;
    }
    
    void CRechtView::OnTimer(UINT nIDEvent) 
    {
    	rect.left++;
    	rect.right++; 
    
    	if (rect.left >= 400)
    		SetRect();
    
    	Invalidate();
    
    	CView::OnTimer(nIDEvent);
    }
    

    Läuft teilweise flüssig, dann flackern von oben nach unten...



  • Weiss denn keiner einen Rat? 😞



  • Mit :

    InvalidateRect(NULL,TRUE);
    UpdateWindow();
    

    flackert es ab und zu

    Mit:

    InvalidateRect(&rect,TRUE);
    UpdateWindow();
    

    Hinterlässt das Rechteck eine schwarze Spur.

    Ist der Timer vielleicht auch das Problem ???

    Ist es denn so schwierig ein einfache gefärbtes Rechteck von links nach rechts zu bewegen ???


Anmelden zum Antworten