为什么图像没有出现在 mfc CListView/CListCtrl 中的子项上?
Why are images not appearing on subitems in mfc CListView/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);
}
}
很简单,但是我得不到我想要的结果,只有第一栏有图片
我希望两列都有图像,所以结果应该是这样的
那么我在这里缺少什么?如何在第二列也正确显示图像?
感谢任何帮助,在此先感谢!
不要使用 ModifyStyleEx()。它用于 CWnd 的扩展样式。对于 CListCtrl 特定样式,请使用 SetExtendedStyle()。检查这个 discussion
引自上文link:
The list of extended styles for the ModifyStyleEx() all start with a WS_EX_... and presumably change a bit in the Window struct via the SetWindowLong(...).
The SetExtendedStyle() method belongs to the CListCtrl in the List View and has style bits defined by LVS_EX_... Since the controls extended style is
sent via a SendMessage(...), the number of extended style bits is not
limited to a single word and so can presumably exceed 32.
我创建了一个从 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);
}
}
很简单,但是我得不到我想要的结果,只有第一栏有图片
我希望两列都有图像,所以结果应该是这样的
那么我在这里缺少什么?如何在第二列也正确显示图像?
感谢任何帮助,在此先感谢!
不要使用 ModifyStyleEx()。它用于 CWnd 的扩展样式。对于 CListCtrl 特定样式,请使用 SetExtendedStyle()。检查这个 discussion
引自上文link:
The list of extended styles for the ModifyStyleEx() all start with a WS_EX_... and presumably change a bit in the Window struct via the SetWindowLong(...). The SetExtendedStyle() method belongs to the CListCtrl in the List View and has style bits defined by LVS_EX_... Since the controls extended style is sent via a SendMessage(...), the number of extended style bits is not limited to a single word and so can presumably exceed 32.