Bitmap aus resource laden und anzeigen



  • Hallo Leute,

    ich hab folgendes Problem, das ich einfach nicht hinbekomme. Wie kann ich auf meiner Programoberfläche eine Bitmap die sich in den Resourcen befindet anzeigen? Im Internet gibt es etliche hilfe, jedoch bin ich damit nicht weitergekommen.

    Ich habe eine Dialogbasierte Anwendung und möchte auf dem Formular einfach nur die in den Resourcen eingebundene Bitmap ("IDB_BITMAP1") anzeigen.

    Ich hab es schon folgendermassen versucht aber es geht net.

    void CTouch_MFC2Dlg::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting
    HDC hdc;
    CBitmap bmp;
    CDC* pDC;
    bmp.LoadBitmap(IDB_BITMAP1);
    bmp.CreateCompatibleBitmap(pDC,50,50);
    dc.BitBlt(0,0,50,50,pDC,0,0,SRCCOPY);
    }
    

    Teilweise bin ich mir garnicht sicherwas ich da eigentlich mache, deshalb bitte nicht am Code aufhägen.

    Wäre schön wenn mir einer dabei helfen kann das die in den Resourcen gespeicherte Bitmap irgendwo auf meiner Programmoberfläche angezeigt wird.

    Gruß
    spacehelix



  • Plaziere einfach ein PictureControl auf deinem Dialog und gib dort die BitmapResource an, ach und 'Bild' muss man auch noch einstellen.



  • Hi,

    ich möchte das aber ohne eine PictureBox machen. Die Bitmap soll auf's Formular gezeichnet werden.

    Gruß
    spacehelix





  • In deinem Coede von oben fehlt dafür noch einiges:

    void CTouch_MFC2Dlg::OnPaint()
    {
        CPaintDC dc(this); // device context for painting
        CBitmap bmp;
        CDC* pDC = new CDC;
        pDC->CreateCompatibleDC( &dc );
        bmp.LoadBitmap(IDB_BITMAP1);
        pDC->SelectObject( &bmp );
        dc.BitBlt(0,0,50,50,pDC,0,0,SRCCOPY);
        bmp.Detach()
        bmp.DeleteObject();
        ReleaseDC( pDC );
        pDC->DeleteDC();
        delete pDC;
    }
    

    Ohne Garantie 😉 besser wäre noch du würdest pDC und bmp als Member deiner Klasse deklarieren.



  • http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel4.htm

    IDB_BITMAP1 BITMAP DISCARDABLE "res\\bitmap1.bmp" //xxx.rc
    
    BOOL CDialogBitmapDlg::OnInitDialog()
    {
    //...
    Bild1.LoadBitmap( IDB_BITMAP1 );
    return TRUE; 
    } 
    
    void CDialogBitmapDlg::OnPaint()
    {
      CClientDC dc( this );
      BITMAP bm;
      Bild1.GetObject( sizeof( bm ), &bm );
      CDC SpeicherDC;
      SpeicherDC.CreateCompatibleDC( &dc );
      SpeicherDC.SelectObject( &Bild1 );
      CRect Rect;
      GetClientRect( &Rect );
      dc.SetStretchBltMode( HALFTONE );
      dc.StretchBlt( 0, 0, Rect.right, Rect.bottom, &SpeicherDC,
                     0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY );
      CDialog::OnPaint();
    }
    


  • Sollte eigentlich in EraseBackground 😉



  • (D)Evil schrieb:

    Sollte eigentlich in EraseBackground 😉

    Sag ich doch 😃



  • Hallo zusammen,

    danke für die Antworten. Ich habe den code von connan mir mal angesehen und ausprobiert. Das funktioniert, danke. Jetzt habe ich aber ein weiteres Problem, ich möchte nicht nur aus CTouch_MFC2Dlg::OnPaint Bitmaps auf dem Formular darstellen, sonder auch aus Funktionen Bitmaps auf dem Dialog darstellen.

    Dazu habe ich die Funktion void draw() erstellt und versucht eine Bitmap anzuzeigen. Leider Funktioniert das nicht.

    void draw()
    {
    
        CPaintDC dc(this);
        CBitmap bmp; 
        CDC* pDC = new CDC; 
        pDC->CreateCompatibleDC( &dc ); 
        bmp.LoadBitmap(IDB_ABWAHL); 
        pDC->SelectObject( &bmp ); 
        dc.BitBlt(110,110,100,100,pDC,0,0,SRCCOPY); 
        bmp.Detach(); 
        bmp.DeleteObject(); 
        ReleaseDC( pDC ); 
        pDC->DeleteDC(); 
        delete pDC; 
    }
    

    Der code ist identisch mit dem von connan. Der Compiler mekert aber bei der Zeile "CPaintDC dc(this);" und sagt mir, "error C2673: 'draw' : global functions do not have 'this' pointers". Was ist der this-Pointer? Weiter Meldet mir der Compiler "error C2660: 'ReleaseDC' : function does not take 1 parameters", bei dem Bsp. von connan hats funktioniert. Wer kann mir helfen auch dieses Problem zu lösen?

    Gruß
    spacehelix

    P.S. Ich hoffe, das ich irgendwann mal C++ verstehe.



  • Hallo Zusammen,

    ich habe mein Problem gelöst.

    Gruß
    spacehelix


Anmelden zum Antworten