Hintergrund neu zeichnen



  • Hallo, für meinen Kompass brauche ich eine Methode, welche mir den alten Zeiger übermalt! Wie kann ich die bereits gezeichneten Linien überschreiben? Anbei meine
    Paint Methode:

    void CAttitude_3Dlg::OnPaint()
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // Gerätekontext für Zeichnen
    
    		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
    	{
    		CDialog::OnPaint();		
    		Gdiplus::Graphics g(GetDC()->GetSafeHdc());
    		//if(FLAG_kompass_zeichnen)	
    			paint_kompass(g);
    			paint_zeiger(g,kompass_min);
    	}
    }
    

    Besten Dank!

    Gruß
    daMike



  • Also du hast einfach eine Paint Methode und du willst den DIalog kommplett neu zeichen ?!

    Referenzen:
    CWnd::Invalidate



  • Klasse .. funktioniert! Gibt es eine Möglichkeit das flimmern zu unterdrücken wenn das Window neu gezeichnet wird?



  • Versuchs mal Invalidate( FALSE ).


  • Administrator

    http://www.codeproject.com/gdi/flickerfree.asp

    Könnte vielleicht auch helfen.

    Grüssli



  • void CAttitude_3Dlg::OnPaint(void)
    {
        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
        {
            CDialog::OnPaint();        
            CDC memDC;
            memDC.CreateCompatibleDC(&dc);
            Gdiplus::Graphics g(memDC.GetSafeHdc());
            //if(FLAG_kompass_zeichnen)    
                paint_kompass(g);
                paint_zeiger(g,kompass_min);
            dc.StretchBlt(0, 0, 0, 0, &memDC, 0, 0, 0, 0, SRCCOPY); // Anpassen...
    
        }
    }
    

    1. Nimm den PaintDC ...
    2. Erstell



  • 👍 sehr zu empfehlen!


Anmelden zum Antworten