Icon zur Laufzeit ändern
-
Hallo,
angenommen ich will das Standard-Icon (IDR_MAINFRAME) zur Laufzeit verändern (z.B. einen schwarzen Strich draufmalen) und es dann in dieser abgeänderten Form wieder anzeigen.
Weiß jemand wie das geht?Gruß,
Michel
-
CWnd::SetIcon oder explizit kann man die WM_SETICON Nachricht schicken
-
Ok,
das ist gut, aber wie kann ich überhaupt in das Icon etwas malen?
-
so sollte es gehen:
CDC* pDC = GetDC(this), MemDC; CBitmap Bitmap; CImageList ImageList; //Imagelist 16x16 Pixel mit einer Maske und 32-Bit Farbtiefe erstellen ImageList.Create(16,16,ILC_COLOR32|ILC_MASK,0,1); MemDC.CreateCompatibleDC(pDC); Bitmap.CreateCompatibleBitmap(pDC,16,16); MemDC.SelectObject(&Bitmap); MemDC.FillRect(0,0,16,16,RGB(255,0,0)); //Irgendwas drauf malen ImageList.Add(&Bitmap,RGB(0,0,0)); //Icon setzen SetIcon(ImageList.ExtractIcon(0),FALSE); //Device Contexts bzw. Gdi Objekte wieder freigeben/löschen ReleaseDC(pDC), MemDC.DeleteDC(), Bitmap.DeleteObject();
-
Hmm... so richtig haut das nicht hin, was ich auch einstell, irgendwie wird das Icon immer schwarz
-
CImageList Objekt muss Member deiner CDialog abgeleiteten Klasse sein.
-
Ich habs das CImageList Objekt als private eingefügt, aber noch immer weigert er sich standhaft. Die betreffende Stelle sieht nun so aus:
CDC* pDC = GetDC(), MemDC; CBitmap Bitmap; //Imagelist 16x16 Pixel mit einer Maske und 32-Bit Farbtiefe erstellen m_ImgList.Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 1); MemDC.CreateCompatibleDC(pDC); Bitmap.CreateCompatibleBitmap(pDC, 16, 16); MemDC.SelectObject(&Bitmap); CBrush bru(RGB(255, 0, 0)); CRect rect(0, 0, 8, 8); MemDC.FillRect(rect, &bru); //Irgendwas drauf malen m_ImgList.Add(&Bitmap, RGB(0,0,0)); //Icon setzen SetIcon(m_ImgList.ExtractIcon(0),FALSE); //Device Contexts bzw. Gdi Objekte wieder freigeben/löschen ReleaseDC(pDC); MemDC.DeleteDC(); Bitmap.DeleteObject();aber das Icon ist immer noch schwarz.
