CDC kopieren



  • Hallo,
    hier mein Code

    //BB - Fenster wird aktualisiert
    	CClientDC dc3(this);
    	dc3.SetBkMode(TRANSPARENT);
    
    	CDC tempDC;
    	tempDC.CreateCompatibleDC(&dc3);
    	tempDC.SetBkMode(TRANSPARENT);
       	tempDC.SelectObject( &graph );
    
    ///////////////////////////////////////////////////////////
    	CDC graphDC;
    	graphDC.CreateCompatibleDC(&dc3);
       	graphDC.BitBlt(0,0, rcClip.Width(), rcClip.Height(), 
            &tempDC,rcClip.left, rcClip.top, SRCCOPY );
    
    // Das hier funktioniert nicht!
    	dc3.BitBlt( rcClip.left, rcClip.top, rcClip.Width(), rcClip.Height(),
            &graphDC,rcClip.left, rcClip.top, SRCCOPY );
    // Das hier funktioniert!
    	dc3.BitBlt( rcClip.left, rcClip.top, rcClip.Width(), rcClip.Height(),
            &tempDC,rcClip.left, rcClip.top, SRCCOPY );
    

    Es geht nach wie vor um das altbekante Backbuffering Problem. Ich habe mir jetzt überlegt, dass es gehen müsste mein CBitmap in ein CDC zu laden und auf das CDC weiter zu malen, ohne das das CBitmap übermalt wird. SelectObject fällt somit aus. Was mache ich bei BitBlt falsch?

    Lasst mich nicht hängen!
    Romeo-G



  • Trial&Error++

    Wen es interessiert:

    //BB - Fenster wird aktualisiert
    	CClientDC dc3(this);
    	dc3.SetBkMode(TRANSPARENT);
    
    	CDC tempDC;
    	tempDC.CreateCompatibleDC(&dc3);
    	tempDC.SetBkMode(TRANSPARENT);
       	tempDC.SelectObject( &graph );
    
    ///////////////////////////////////////////////////////////
    	CDC graphDC;
    	graphDC.CreateCompatibleDC(&dc3);
    	graphDC.SetBkMode(TRANSPARENT);
    
    		rcClip=cR_gMain;
    	    GetClientRect(&rcClient);
    
    		 graph_infos.DeleteObject();
        	 graph_infos.CreateCompatibleBitmap(&dc3, rcClient.Width(), rcClient.Height());
        	 graphDC.SelectObject( &graph_infos );
    
        	 CRgn rgn;
        	 rgn.CreateRectRgnIndirect( &rcClip );
        	 graphDC.SelectClipRgn(&rgn);
        	 rgn.DeleteObject();
    
       	graphDC.BitBlt(rcClip.left, rcClip.top, rcClip.Width(), rcClip.Height(), &tempDC,rcClip.left, rcClip.top, SRCCOPY );
    
    dc3.BitBlt( rcClip.left, rcClip.top, rcClip.Width(), rcClip.Height(), &graphDC,rcClip.left, rcClip.top, SRCCOPY );
    

Anmelden zum Antworten