CListCtrl - Bitmaps in einem CListCtrl anzeigen!



  • Also für alle die schon mal Bitmaps in nem ListCtrl anzeigen wollten habe ich mit dEUs zusammen (dEUs, hat natürlich nen bischel mehr dazu beigetragen)
    nen kleinen source der bitmaps einmal als resource und einmal als datei lädt, sie dann auf eine größe bringt und im ListCtrl anzeigt.

    int size = 64; 
    //hier wird die gemeinsamme größe für Bitmap und ListCtrl festgelegt. Könnt natürlich auch kleiner 32 oder 16 oder größer 128 ect.
    CBitmap bitmap,bit; // Hier werden zwei variablen vom Typ CBitmap erzeugt. "bitmap" ist das quell- und "bit" das zielbitmap, was letzlich angezeigt wird.
    BITMAP bm; das ist um die größe des Quellbitmap herauszubekommen.
    
    bitmap.Attach(LoadImage(NULL,"hier den pfad und namen des bmp",IMAGE_BITMAP,NULL,NULL,LR_LOADFROMFILE|LR_DEFAULTCOLOR|LR_DEFAULTSIZE));
    //Attach deswegen weil LoadImage HBITMAP als zeiger übergibt. LoadImage deswegen damit man das bitmap als datei laden kann.
    // Wenn ihr aus einer resource laden wollt dann mach die Befehlszeile weg und ersetzt durch diese
    //bitmap.LoadBitmap(nID);
    bitmap.GetObject(sizeof(bm), &bm);
    {
            CDC speicherDC;
            speicherDC.CreateCompatibleDC(GetDC());
            speicherDC.SelectObject(&bitmap);
            //so hier wird der Gerätekontex für das quellbitmap erzeugt.
            CDC BmpDC;
            BmpDC.CreateCompatibleDC(GetDC());
            bit.CreateCompatibleBitmap(GetDC(),size,size); //mit CreateCompatibleBitmap erzeugen wir ein bitmap aus einem Gerätekontex. In diesem fall ist das BmpDC
            BmpDC.SelectObject(&bit);
            //hier wird der Gerätekontex für das zielbitmap erzeugt.
            BmpDC.SetStretchBltMode(HALFTONE);
            ::SetBrushOrgEx(BmpDC.m_hDC ,0,0,NULL);
            //die beiden zeilen sind wichtig weil das bild sonst net in den richtigen farben angezeigt wird. Was sie machen weis ich net, dEUs muss mal erklären ;)
            BmpDC.StretchBlt(0, 0,size,size,&speicherDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
            //hier wird das quellbitmap auf die oben eingestellte größe gebracht.
            // In Klammern, damit BmpDC zerstört wird, bevor das Bild zur Imagelist hinzugefügt wird,
           // da es sonst irgendwie das Bitmap sperrt und es somit nicht richtig zu Imagelist hinzugefügt
          // werden kann ...
    }   
    //Ich denke mal das ich zu hier unten nix sagen muss
    CImageList m_ImageList;
    m_ImageList.Create(size,size,ILC_COLOR24,1,1);
    m_ImageList.Add(&bit , RGB(0,0,0));
    CListCtrl * pListCtrl = (CListCtrl*) GetDlgItem(IDC_LIST1);
    pListCtrl->SetImageList(&m_ImageList,LVSIL_NORMAL);
    pListCtrl->InsertItem(0,"Bitmap",0);
    

    So ich hoffe das ich alles einigermasen richtig erklärt habe.
    Nochmal auch vielen herzlichen dank an dEUs

    EDIT:
    CodeTags

    [ Dieser Beitrag wurde am 09.08.2002 um 14:57 Uhr von dEUs editiert. ]


Anmelden zum Antworten