CListCtrl->InsertItem
mylist4.InsertItem(1, _T("陈行甲"), 0);//插入一行(一项)我的问题:mylist4是CListCtrl报表模式,执行后参数3中图像列表的图像不显示
在CListCtrl中,报表视图(Report View)允许您使用多列来显示项目信息,并可选择显示图像。如果在执行 mylist4.InsertItem(1, _T("陈行甲"), 0); 后图像列表中的图像没有显示,可能原因有以下几点:
1. 确保您已经创建了图像列表并将其附加到CListCtrl对象。例如:
CImageList m_ImageList;
m_ImageList.Create(16, 16, ILC_COLOR32, 4, 4); // 创建图像列表,指定图像尺寸和颜色深度
// 添加位图到图像列表
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1); // IDB_BITMAP1是资源ID
m_ImageList.Add(&bmp, RGB(255, 255, 255)); // RGB(255, 255, 255)表示要透明的颜色
mylist4.SetImageList(&m_ImageList, LVSIL_SMALL); // 将图像列表附加到CListCtrl对象
2. 确保CListCtrl已经设置了报表视图(Report View)样式。您可以通过在对话框初始化函数中添加如下代码来实现:
mylist4.ModifyStyle(0, LVS_REPORT); // 将CListCtrl样式设置为报表视图
3. 确保您已经正确添加了列。例如,如果您有两列,可以按照以下方式添加:
mylist4.InsertColumn(0, _T("名称"), LVCFMT_LEFT, 100); // 插入第一列
mylist4.InsertColumn(1, _T("描述"), LVCFMT_LEFT, 150); // 插入第二列
在上述条件满足的情况下,插入一项后,图像应该可以正常显示。如果仍然无法显示,请检查您的代码以确定是否存在其他问题。
CImageList* pImageList;
HBITMAP hbmp1;
CBitmap* pBitmap1;
HBITMAP hbmp2;
CBitmap* pBitmap2;
HBITMAP hbmp3;
CBitmap* pBitmap3;
HBITMAP hbmp4;
CBitmap* pBitmap4;
CWnd* pWnd4 = GetDlgItem(IDC_LIST4);//列表视图控件4的句柄
HWND hWnd4 = pWnd4->GetSafeHwnd();
LONG Styles = GetWindowLong(hWnd4, GWL_STYLE);//获取窗口风格
LONG l = SetWindowLong(hWnd4, GWL_STYLE, Styles | LVS_REPORT| LVS_EX_GRIDLINES); //设置新的窗口风格
int i= mylist4.InsertColumn(0, _T("姓名"), LVCFMT_CENTER,70,-1);//在报告模式下插入一列
i = mylist4.InsertColumn(1, _T("物理"), LVCFMT_CENTER, 70, -1);
i = mylist4.InsertColumn(2, _T("化学"), LVCFMT_CENTER, 70, -1);
int i1=mylist4.InsertItem(0, _T("李明")); //插入一行(一项)
pImageList = new CImageList(); // 创建一个CImageList类的指针变量
pImageList->Create(32, 32, ILC_COLOR32, 0, 4); // 确定图像规格--必不可少
hbmp1 = (HBITMAP)::LoadImage(NULL, _T("D:\\bb\\tubiao\\1.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_CREATEDIBSECTION);
pBitmap1 = new CBitmap;
pBitmap1->Attach(hbmp1);//CWND句柄指向win32API句柄
pImageList->Add(pBitmap1, RGB(0, 0, 0)); //添加外部文件图像
hbmp2 = (HBITMAP)::LoadImage(NULL, _T("D:\\bb\\tubiao\\2.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_CREATEDIBSECTION);
pBitmap2 = new CBitmap;
pBitmap2->Attach(hbmp2);//CWND句柄指向win32API句柄
pImageList->Add(pBitmap2, RGB(0, 0, 0)); //添加外部文件图像
hbmp3 = (HBITMAP)::LoadImage(NULL, _T("D:\\bb\\tubiao\\3.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_CREATEDIBSECTION);
pBitmap3 = new CBitmap;
pBitmap3->Attach(hbmp3);//CWND句柄指向win32API句柄
pImageList->Add(pBitmap3, RGB(0, 0, 0)); //添加外部文件图像
hbmp4 = (HBITMAP)::LoadImage(NULL, _T("D:\\bb\\tubiao\\4.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_CREATEDIBSECTION);
pBitmap4 = new CBitmap;
pBitmap4->Attach(hbmp4);//CWND句柄指向win32API句柄
pImageList->Add(pBitmap4, RGB(0, 0, 0)); //添加外部文件图像
CImageList* pold = new CImageList;
pold=mylist4.SetImageList(pImageList, LVSIL_NORMAL);//给列表视图控件设置图像列表
/*
参数1:CImageList* pImageList图像列表指针
参数2:int nImageListType 图像的类型的列表。 它可以是以下值之一:
LVSIL_NORMAL 图像列表与大图标。
LVSIL_SMALL 图像列表与小图标。
LVSIL_STATE 图像列表与状态图像
返回值:CImageList*以前的图像列表指针
*/
i1=mylist4.InsertItem(1, _T("陈行甲"), 0);//插入一行(一项)
/*
参数1:int nItem行的索引
参数2:LPCTSTR lpszItem控件头的名字
参数3:int
返回值:行号
*/
请看代码 图像不显示?? 根据您提供的代码,问题可能是在CListCtrl控件创建时没有关联图像列表。要在CListCtrl中显示图像,请按照以下步骤操作:
1、创建一个CImageList对象:
// 创建并且加载图像列表
CImageList imageListSmall;
imageListSmall.Create(16, 16, ILC_COLOR24 | ILC_MASK, 4, 4);
HICON hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);
imageListSmall.Add(hIcon);
// 对 hIcon 进行销毁,因为已经添加到图像列表中。
DestroyIcon(hIcon);
2、将该图像列表与CListCtrl关联:
mylist.SetImageList(&imageListSmall, LVSIL_SMALL); // 将图像列表与 CListCtrl 关联
3、在将项插入CListCtrl之前,使用CListCtrl::GetImageList()方法获取与CListCtrl相关联的图像列表,并针对每个需要具有图标的项使用CImageList::Draw()方法绘制图像。例如:
// 根据项索引获取与 CListCtrl 相关联的图像列表
CImageList* pImageList = mylist.GetImageList(LVSIL_SMALL);
// 插入新的一行(一项)并指定其图片索引
int nIndex = mylist.InsertItem(1, _T("陈行甲"), 0);
if (pImageList && nIndex >= 0)
{
// 绘制位于 0 号图像位置的图标
pImageList->Draw(&dc, 0, ptIcon, ILD_TRANSPARENT);
}
需要注意的是,以上代码示例中的ptIcon变量用于指定图像的绘制位置,如果您不需要将图像绘制到特定位置,则可以将其置为空。此外,确保与CListCtrl关联的图像列表具有足够的大小和颜色深度以容纳所需的所有图标。 CImageList* pold = new CImageList;
pold=mylist4.SetImageList(pImageList, LVSIL_NORMAL);
pold的返回值是NULL,说明执行失败,为何失败 ?? pold=mylist4.SetImageList(pImageList, LVSIL_SMALL); 我改为LVSIL_SMALL就显示了
可是我的图像是32x32的,难道LVSIL_NORMAL不能显示 ??
页:
[1]