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. 😕


Anmelden zum Antworten