Generiertes Bitmap in ImageList anzeigen ??



  • Hallo zusammen,
    Mir stellt sich folgendes Problem:

    Ich möchte ein Bitmap, das während des Programmdurchlaufs geändert wird
    anschliessend in eine ImageList schreiben und danach in eriner ListCtrl
    anzeigen. Das Bitmap wird nur um 4 Pixel geändert (als Test).

    CDC     DC; 
        CDC*    pDC = GetDC(); 
        CBitmap Bitmap;
        Bitmap.LoadBitmap(IDB_GRUNDGRAFIK);
        DC.CreateCompatibleDC(pDC); 
        Bitmap.CreateCompatibleBitmap(pDC, 270, 50); 
    
        DC.SelectObject(&Bitmap); 
        DC.SetPixel(20 , 22 , RGB(255, 0, 0));
        DC.SetPixel(20 , 24 , RGB(255, 0, 0));
        DC.SetPixel(20 , 26 , RGB(255, 0, 0));
        DC.SetPixel(20 , 28 , RGB(255, 0, 0));
    
        mp_ImageList.Create(270,50,ILC_COLOR32|ILC_MASK,4,4);
    
        mp_ImageList.Add(&Bitmap,RGB(256,0,0));
    
        m_Liste2.SetImageList(&mp_ImageList,LVSIL_NORMAL);
        m_Liste2.InsertItem(1, "TEST", 0);
    

    Soweit so gut.
    Sobald das Programm allerdings folgende Zeile durchläuft bekomm
    ich einen Runtime- Fehler.

    Bitmap.CreateCompatibleBitmap(pDC, 270, 50);

    und danach wird nur ein schwarzes Bild dargestellt.
    Ich hoffe mein Problem ist klar geschildert.

    Bin für jede Hilfe sehr dankbar.

    Danke



  • Also ich habe mittlerweile ein paar Sachen rausgefunden
    (vielleicht hilft mir ja jetzt jemand 🙂 )

    Ich habs mittlerweile geschafft ein Bitmap zu verändern (Linie ziehen z.B.)
    und es nacher weiter zu verwenden (auf Button abbilden). Aber das Bitmap
    anschliessend auch im ListCtrl anzuzeigen funktioniert nicht.

    CDC     DC; 
        CDC*    pDC = GetDC(); 
    
        Bitmap.LoadBitmap(IDB_GRUNDGRAFIK);    // CBitmap Variable dek. im Header-File
        bitmap.LoadBitmap(IDB_GRUNDGRAFIK);    // ebenfalls
    
        DC.CreateCompatibleDC(pDC); 
        DC.SelectObject(&Bitmap);
    	DC.MoveTo(30,30);
    	DC.LineTo(100,30);       // Diese 4 Zeilen Reichen anscheinend um das Bitmap zu veränderen und anschliessend weiter zu verwenden.
    
    	m_Bild.SetBitmap(Bitmap); //CButton Objekt. Bitmap wird darauf abgebildet
    
    	UpdateData(FALSE);
    
    	mp_ImageList.Create(270,50,ILC_COLOR32|ILC_MASK,4,4);
    
    	mp_ImageList.Add(&Bitmap,RGB(0,0,0));     // Geändertes Bitmap
    	mp_ImageList.Add(&bitmap,RGB(0,0,0));     // Unverändertes Bitmap
    
    	m_Liste2.SetImageList(&mp_ImageList,LVSIL_NORMAL);
    	m_Liste2.InsertItem(1, "TEST", 0);             //Funktioniert nicht
    	m_Liste2.InsertItem(2, "AUCH TEST", 1);        //Funktioniert
    

    Fällt da jemanden was ein??



  • Hi,

    vielleicht kann ich Dir helfen....

    Ich habe Dein Grundgerüst genommen und folgende Sachen geändert:

    - Spalten für das ListCtrl definiert:

    m_cList1.InsertColumn(0, "Spalte1", LVCFMT_LEFT, 80);
    m_cList1.InsertColumn(1, "Spalte2", LVCFMT_LEFT, 220);
    

    - Die Bearbeitung der Bitmap folgendermassen geändert:

    DC.CreateCompatibleDC(pDC); 
    CBitmap* pOldBitmap = DC.SelectObject(&Bitmap); 
    DC.MoveTo(10,10); 
    DC.LineTo(39,39);  
    DC.SelectObject(pOldBitmap); // Wichtig: "Altes" Object muss wieder selektiert werden!
    

    - Und als letztes die Zeilen mit folgenden Befehlen füllen:

    nitem = m_Liste2.InsertItem(1, "", 0);
    m_Liste2.SetItemText(nitem, 1, "Test");
    nitem = m_Liste2.InsertItem(2, "", 1); 
    m_Liste2.SetItemText(nitem, 1, "AUCH TEST");
    

    Bei mir klappt das einwandfrei (auch wenn man die diagonale "Leerlinie" kaum sieht...)

    Gruss

    yeti



  • Hey funktioniert tatsächlich einwandfrei!! 👍 😃

    Echt super Danke!¨

    Ich glaube das entscheidende war, wieder das alte Objekt zu selektieren.
    Obwohl ich das noch nirgends vorher gesehend habe 🙂

    Besten Dank


Anmelden zum Antworten