为什么图像不出现在mfc CListView / CListCtrl中的子项目上?

时间:2015-05-07 07:49:07

标签: c++ mfc clistctrl

我创建了一个从CListView派生的非常简单的视图,我希望能够在CListView的每一列上显示图像。
为了做到这一点,我知道我必须使用LVS_EX_SUBITEMIMAGES并使用SetItem在子项目中设置图像,这很简单,但不起作用。
所有代码都在这里

void MyListView::OnInitialUpdate()
{
    CListView::OnInitialUpdate();

    //create the list control
    GetListCtrl().ModifyStyle(0,LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP);
    GetListCtrl().ModifyStyleEx(0,LVS_EX_SUBITEMIMAGES);
    GetListCtrl().InsertColumn(0, _T("Column 1"), LVCFMT_LEFT,60);
    GetListCtrl().InsertColumn(1, _T("Column 2"), LVCFMT_LEFT,60);

    //load the images
    CImageList *pImageList;
    pImageList = new CImageList();
    pImageList->Create( 26,26, ILC_MASK | ILC_COLOR16,2, 2);

    CBitmap bitmap;
    bitmap.LoadBitmap(  IDB_MAIN);
    pImageList->Add( &bitmap, (COLORREF)0xFFFFFF);
    bitmap.DeleteObject();

    bitmap.LoadBitmap( IDB_MAIN1);
    pImageList->Add( &bitmap, (COLORREF)0xFFFFFF);
    bitmap.DeleteObject();
    GetListCtrl().SetImageList( pImageList, LVSIL_SMALL);
    GetListCtrl().SetImageList( pImageList, LVSIL_NORMAL);
    GetListCtrl().SetImageList( pImageList, LVSIL_STATE);
    GetListCtrl().SetImageList( pImageList, LVSIL_GROUPHEADER);

    COLORREF col;
    col = RGB(240,240,240);
    GetListCtrl().SetBkColor(col);
    GetListCtrl().SetTextBkColor(col);
    GetListCtrl().SetRedraw(TRUE);

    //fill the view with 10 sample items
    for (int i=0;i<10;i++)
    {   
        CString csItem;
        csItem.Format(L"Item %d",i+1);

        GetListCtrl().InsertItem(LVIF_TEXT|LVIF_IMAGE,i,csItem,0,0,0,0);

        CString csItem2;
        csItem2.Format(L"Item2 %d",i+1);
        GetListCtrl().SetItem(i,1,LVIF_TEXT|LVIF_IMAGE,csItem2,1,0,0,0,0);
    }
}

这很简单,但我无法得到我想要的结果,只有第一列有图像
wrong result
我希望两列都有图像,所以结果应该是这样的 expected result, edited picture with mspaint =)

那我在这里错过了什么?如何在第二列上正确显示图像?任何帮助都是恭喜的,提前谢谢!

1 个答案:

答案 0 :(得分:1)

不要使用ModifyStyleEx()。这是CWnd的扩展风格。对于CListCtrl特定样式,使用SetExtendedStyle()。请检查此discussion

从上面的链接引用:

  

ModifyStyleEx()的扩展样式列表都以WS_EX _...开头,并且可能通过SetWindowLong(...)在Window结构中改变一点。   SetExtendedStyle()方法属于列表视图中的CListCtrl,并且具有由LVS_EX _...定义的样式位。由于控件扩展样式是   通过SendMessage(...)发送,扩展样式位的数量不是   仅限于一个单词,因此可能超过32个。