Eigene Methode umd Bitmaps darzustellen



  • Ich kämpfe zur Zeit mit folgenden Problem: Das Projekt, das ich habe besteht aus zwei Klassen (CVerwaltung und CBild). CVerwaltung übernimmt, wie der Name schon sagt, die Verwaltung der Bitmapsklassen, spricht, es ist eine (einfach) verkettete Liste.
    Auf den Aufruf von OnPaint() will ich eine Methode von CBild aufrufen, die mir dann das Bitmap auf dem Schirm zeichnet. Dass heist:

    void COelleitungDlg::OnPaint() 
    {
    	CClientDC dc(this);
    	CClientDC *pointer_dc;
    	pointer_dc = &dc;
    
    	(Verwaltung.get_aktuell())->zeichne_bild(pointer_dc);
    
    }
    

    Die Methode zeichne_bild sieht momentan so aus:

    void Cbild::zeichne_bild(CClientDC *pdc)
    {	
    	CDC speicherDC;
    	BITMAP bm;
    	CBitmap bitmap;
    
    	bitmap.GetObject(sizeof(bm), &bm);
    	bitmap.LoadBitmap(IDB_BITMAP1);
    
    	speicherDC.CreateCompatibleDC(pdc);
    	speicherDC.SelectObject(&bitmap);
    
    	(*pdc).BitBlt(0,0,bm.bmWidth, bm.bmHeight,&speicherDC,0,0,SRCCOPY);
    }
    

    Mit dem Debugger habe ich vestgestellt, dass beim Aufruf von GetObject(sizeof(bm), &bm) ein Fehler auftritt, denn ich aber nicht beseitigen kann. Wenn ich kompiliere, gibt es weder einen Fehler noch eine Warnung. Das Programm stürtzt "nur" bei besagter Stelle ab.

    Hätte mir jemand einen "kleinen" Tipp?
    Vielen Dank
    Thomas





  • Alle mir gängigen Sites, Foren, Bücher etc habe ich bereits durchgelesen, aber in keiner wird eine Funktion benutzt. Wenn ich meinen Code wie oben geschireben in den Aufruf von OnPaint() kopiere, läuft es problemlos....
    In der Zwischenzeit habe ich eine Möglichkeit gefunden, das ganze mit Methode zu zeichnen, ich gehe allerdings davon aus, dass das alles andere als "schön" ist...?

    void Cbild::zeichne_bild(CClientDC *pdc)
    {	
    	CDC speicherDC;
    	BITMAP bm;
    	CBitmap bitmap;
    
    	bitmap.LoadBitmap(ID);
    	bitmap.GetObject(sizeof(bm), &bm);
    
    	speicherDC.CreateCompatibleDC(pdc);
    	speicherDC.SelectObject(&bitmap);
    
    	pdc->BitBlt(0,0,bm.bmWidth, bm.bmHeight,&speicherDC,0,0,SRCCOPY);
    }
    

Anmelden zum Antworten