Search code examples
visual-c++mfcimagelist

How to add Images to CListCtrl in MFC


How do you add Images to a ClistCtrl in MFC? I have tried and found that it's quite difficult.

I used CImageList to add images and then passed it to the CListCtrl. Can you provide some samples?

m_sentToCListCtrl.InsertColumn(0, _T("Item Name"), LVCFMT_LEFT,nColInterval*3);     
m_sentToCListCtrl.InsertColumn(1, _T("Value"),LVCFMT_LEFT, nColInterval);
m_sentToCListCtrl.InsertColumn(2, _T("Time"), LVCFMT_LEFT, rect.Width()-4*nColInterval);
ListView_SetExtendedListViewStyle(m_sentToCListCtrl.m_hWnd,LVS_EX_CHECKBOXES );

// Create 256 color image lists     
HIMAGELIST hSentToList =ImageList_Create(84,71, ILC_COLOR8 |ILC_MASK , 8, 1);
m_sentToImageList.Attach(hSentToList);

Solution

  • You need to add some bitmaps to your CImageList after you have created it. Something like this:

    m_myImageList.Create(84,71, ILC_COLOR8 |ILC_MASK , 8, 1);
    
    CBitmap bm;
    bm.LoadBitmap(IDB_BITMAP1);
    m_myImageList.Add(&bm, RGB(0, 0, 0));
    bm.LoadBitmap(IDB_BITMAP2);
    m_myImageList.Add(&bm, RGB(0, 0, 0));
    

    Then, attach it to the CListCtrl:

    m_sentToCListCtrl.SetImageList(&m_imageList, LVSIL_SMALL);
    

    Finally, you add items to your CListCtrl by using the InsertItem method:

    LVITEM lvItem;
    lvItem.iItem = 0;
    lvItem.iImage = 0;    // image index that refers to your image list
    lvItem.pszText = L"Item 1";
    lvItem.mask = LVIF_TEXT;
    
    m_sentToCListCtrl.InsertItem(&lvItem);
    

    For more info refer to CListCtrl documentation. There are examples too.