Veröffentlicht 17. August 201015 j Hi, ich habe ein kleines Problem bei der Verwendung von farbigen Icons. Ich erstelle diese dynamisch nach einer übergebenen COLORREF und verwende diese dann in einem Tree als Icon. Das ganze funktioniert auch in Windows Vista wunderbar, aber wenn ich es unter Windows XP ausführe sind alle farbigen Icons schwarz. Ich habe bereits alle möglichen Varianten der Maske und Initialisierung des Bitmaps und der ImageList versucht, aber das ERgebnis ist immer das gleiche. Wäre super, wenn ein Experte aus der MFc was dazu weiß komme ja eigentlich aus dem .NET-Bereich und tue mir eh etwas schwer mit dem Verstehen. // Initialisierung der ImageList CImageList m_ImgList; CBitmap bmp; // IDB_TREEIMG ist ein 24-bit-Bild, dass ich anzeige, wenn kein COLORREF verfügbar ist, ganz nebenbei sorgt das Bild dafür, dass die ImageList als 24-bit-Liste inisitalisiert wird bmp.LoadBitmap(IDB_TREEIMG); m_ImgList.Create(16, 16, ILC_COLOR24 | ILC_MASK, 0, 1); m_ImgList.Add(&bmp, RGB(255,255,255)); Die eigentlichen farbigen Icons erstelle ich dann folgendermaßen: COLORREF colorRef; // wird der Funktion übergeben, nur zur Vollständigkeit aufgeführt. CBitmap bitmap; bitmap.CreateCompatibleBitmap(pViewDC, 16, 16); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); CBrush oBrush(colorRef); CPen oPen (PS_SOLID,1,colorRef); CBrush* pOldBrush = memDC.SelectObject(&oBrush); CPen * pOldPen = memDC.SelectObject(&oPen); memDC.Rectangle(0,0,16,16); pViewDC->SelectObject(pOldBitmap); memDC.SelectObject(pOldBrush); memDC.SelectObject(pOldPen); ReleaseDC(pViewDC); int pos = m_ImgList.Add(&bitmap, RGB(255,255,255)); Danke für jegliche Art von Hilfe Viele Grüße MiBo
17. August 201015 j Hi, LoadBitmap gibt 1 zurück. Denke aber nicht, dass das Problem hier liegt, da dieses "Default-Image" in beiden Betriebssystemen korrekt dargestellt wird. Nur die dynamisch erstellen Icons unterscheiden sich. Trotzdem danke für die Antwort
17. August 201015 j pViewDC->SelectObject(pOldBitmap);Hier solltest du memDC benutzen, nicht pViewDC. Der hat doch mit dem Zeichnen gar nichts zu tun.
18. August 201015 j Ups, tut mir leid. Den Teil hatte ich vergessen einzufügen ... CDC *pViewDC = GetDC(); CDC memDC; memDC.CreateCompatibleDC(pViewDC);
18. August 201015 j Direkt innerhalb der Funktion, die mein farbiges Icon erstellt, also der erste Codeblock aus meinem Startbeitrag. LG MiBo
18. August 201015 j Moin. Wieder eine kurze Nachfrage: Beide Codeblöcke stammen aus der selben Funktion?
18. August 201015 j Nein, der erste Code-Block wird nur am Anfang zur Initialisierung der ImageList ausfgerufen. Wenn ich das Standard-Image mit 24-Bit nicht in die ImageList lade, hat sie aus irgendwelchen Gründen 8Bit, egal was ich einstelle. Der zweite Code-Block ist dann eine Funktion, die mir ein neues farbiges Icon erstellt und der ImageList hinzufügt.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.