我创建了一个从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);
}
}
这很简单,但我无法得到我想要的结果,只有第一列有图像
我希望两列都有图像,所以结果应该是这样的
那我在这里错过了什么?如何在第二列上正确显示图像?任何帮助都是恭喜的,提前谢谢!
答案 0 :(得分:1)
不要使用ModifyStyleEx()。这是CWnd的扩展风格。对于CListCtrl特定样式,使用SetExtendedStyle()。请检查此discussion
从上面的链接引用:
ModifyStyleEx()的扩展样式列表都以WS_EX _...开头,并且可能通过SetWindowLong(...)在Window结构中改变一点。 SetExtendedStyle()方法属于列表视图中的CListCtrl,并且具有由LVS_EX _...定义的样式位。由于控件扩展样式是 通过SendMessage(...)发送,扩展样式位的数量不是 仅限于一个单词,因此可能超过32个。