Flackern & Striche



  • Ich habe eine dialogfeldbasierende Anwendung über die einRechteck "slided", allerdings gibt es Schmiereffekte: Striche und das Rechteck flackert.

    Hat jemand einen Rat ?

    void CRechteckDlg::OnButtonRectangle() 
    {
    	CString cstrButtonText;
    	GetDlgItem(IDC_BUTTON_RECTANGLE)->GetWindowText(cstrButtonText);
    	if (cstrButtonText == "Start") {
    		m_iFlag = 1;
    		bTimer = TRUE;	
    
    		CWinThread* pThread = AfxBeginThread (threadFunction, this);
    		GetDlgItem(IDC_BUTTON_RECTANGLE)->SetWindowText("Stop");
    	}
    	else{		
    		m_iFlag = 0;
    		bTimer = FALSE;
    		GetDlgItem(IDC_BUTTON_RECTANGLE)->SetWindowText("Start");	
    	}	
    }
    
    UINT CRechteckDlg::threadFunction(LPVOID pParam)
    {
    	CRechteckDlg* pDlg = (CRechteckDlg*) pParam;
    	pDlg->threadRun();
    
    	return 0;
    }
    
    VOID CRechteckDlg::threadRun()
    {
    	while (m_iFlag) {
    
    		// Rechteck ausserhalb des definierten Bereichs ?
    		if (rectdata.left >= 400)
    			SetRect();					
    
    		// Device Kontext des Fensters holen
    		CDC* pDC = GetDC();
    		CBrush brush(RGB (255, 0, 0));
    
    		pDC->SelectObject(&brush);
    		pDC->Rectangle(&rectdata);
    		pDC->DeleteDC();
    
    	}
    }
    
    VOID CRechteckDlg::SetRect()
    {
    	rectdata.left = 10;
    	rectdata.top = 10;
    	rectdata.bottom = 40;
    	rectdata.right = 80;
    }
    
    void CRechteckDlg::OnTimer(UINT nIDEvent) 
    {
    	if (bTimer) {
    
    		RedrawWindow(&rectdata, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE );
    		rectdata.left++;
    		rectdata.right++;		
    	}
    
    	CDialog::OnTimer(nIDEvent);
    }
    



Anmelden zum Antworten