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 habeBesten Dank