OnPaint Problem! Ich habe eine SDI mit mehreren Dialogen



  • Guten Tag zusammen,

    ich habe eine SDI mit mehreren Dialogen. Nun würde ich gerne einen Dialog kontinuierlich Repainten. Will da einie Grafiken als Bewegungdarstellen. Hab versucht über einen Thread dir OnPaint aufzuruchen, klappt aber nicht.
    Muß irgendwie das OnPaint erzwingen: 👍

    würde mich sehr über einen Tip freuen.



  • Hi

    habe es mit

    Invalidate();
    

    hinbekommen, aber nicht so fein. Kann man nicht dieses OnPaint aufrufen lassen?



  • Mach es mit einer Boolschen Variable..

    1) Variable erstellen :

    BOOL bRes;
    

    2) Dann im Konstruktor auf FALSE setzen ...

    3) Und dann in deiner Funktion :

    void CTestDlg::BildMalen()
    {
       bRes = TRUE;
    }
    

    4) Und dann in der OnPaint :

    ...
    ...
    if(bRes)
    {    
       //Hier QuellCode fürs zeichnen des Bildes
    ..
    ..
    }
    

    Dann wird der Code nur aufgerufden wenn bRes TRUE ist..

    Gruß
    :: NoName ::



  • Hi NoName,

    danke für deine Antwort. Mein Problem ist eigentlich mehr, das er nicht das OnPaint macht.
    Deswegen habe ich etwas mit Invalidate() versucht. klappt auch soweit, aber flackert wie verrrücht. Ich mache das was mit einer 3D Animation.

    Habe versucht, das Flackern mit

    RedrawWindow();
    

    in den Griff zu bekommen klappte aber nicht. das Bild soll neben bei noch so schnell wie möglich gezeichnet werden.



  • Hmm, wo schreibst du denn dein Code rein ? Also wo genau in der OnPaint ?
    Der Code muss hier stehen :

    void CTestDlg::OnPaint() 
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // device context for painting
    
    		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
    
    		// Center icon in client rectangle
    		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;
    
    		// Draw the icon
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    
             [b][u]//HIER MUSS DER CODE STEHEN[/u][/b]
    
    		CDialog::OnPaint();
    	}
    }
    

    Gruß
    :: NoName ::



  • Danke für die umfangreiche Antwort.

    Also es sieht so aus, das die OnPaint Methode nicht kontinuierltich aufgreufen wird. Es wird beim Aufruf einmal gepainted und dann nicht mehr. DAnn muß InvalidateRect(NULL,FALSE); oder etwas in der Richtung aufgerufen werden, um den Disalog zu repainten.

    Im Moment mache ich das über einen Thread, werde es jetzt aber mal mit nem Timer machen.

    Bin auf der Suche nach anderen Möglichleiten.
    Momantan zeichen ich direkt auf den Dialog


Anmelden zum Antworten