Hilfe Problem mit Device Context DC.bitBlt(.......))
-
Hallo ihr... im folgen Code erzeuge ich einen neuen CDC (pX) ,darin mal ich dann eien ellipse und ein text, und will disen DC dann mit bitblt auf den pDC blasten bzw. kopieren.. aber es zeig im fenster nicths an.. wieso nicht???
hilfevoid CChildView::OnPaint() { CPaintDC pDC(this); // Gerätekontext zum Zeichnen CDC *pX= new CDC(); pX->CreateCompatibleDC(&pDC); pX->SelectStockObject(GRAY_BRUSH); pX->TextOut(0,0,"TTT"); pX->Ellipse(CRect(0,20,100,120)); //CDC *pDC= new CDC(); CRect CClientArea; GetClientRect(&CClientArea); pDC.BitBlt(0,0,CClientArea.right,CClientArea.bottom, pX,0,0,SRCCOPY);
-
- Du brauchst den 2. DC nicht mit new anlegen, weil Du den sonst wieder mit delete freigeben musst
- Du musst ein neues Bitmap erzeugen, weil beim erzeugen eines DCs das Bitmap nur 1x1 Pixel groß istso in etwa:
CPaintDC dc(this); CRect rcClient; GetClientRect( &rcClient ); CDC memDC; memDC.CreateCompatibleDC( &dc ); // Bitmap mit der gleichen Größe wie Client CBitmap bmp; bmp.CreateCompatibleBitmap( &memDC, rcClient.right, rcClient.bottom ); CBitmap* pBmpOld = memDC.SelectObject( &bmp ); CBrush brush; // Bitmap ist beim erstellen schwarz brush.CreateSysColorBrush( COLOR_WINDOW ); memDC.FillRect( &rcClient, &brush ); memDC.SelectStockObject( GRAY_BRUSH ); memDC.Ellipse( CRect( 0, 20, 100, 120 )); // für die Ästhetik ;) memDC.SetBkMode( TRANSPARENT ); memDC.TextOut( 0, 0, "TTT" ); dc.BitBlt( 0, 0, rcClient.right, rcClient.bottom, &memDC, 0, 0, SRCCOPY ); // das alte Bitmap wieder in den DC laden memDC.SelectObject( pBmpOld );
-
ok . das versuch ich dich mal aus .. danke:)
Wenn ich ein 2D -Objekt bewegen lassen will im fenster, mach ich das doch dann so wie du es gecoded hast oder, damit es nich flackert??