今天在论坛上面看到一个帖子,楼主使用ImageList添加BMP文件,然后在ListCtrl中使用,代码如下:
1: CImageList* m_imagelist;
2: m_imagelist = new CImageList();
3: m_imagelist->Create(32, 32, ILC_COLOR32, 0, 4);
4: HBITMAP hBitmap;
5: CBitmap *pBitmap;
6: CString FilePathName = "D://测试//4.BMP";
7: pBitmap = new CBitmap;
8: //从文件导入位图
9: hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FilePathName,
10: IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
11: pBitmap->Attach(hBitmap);
12: m_imagelist->Add(pBitmap, RGB(0,0,0));
13:
14: m_list.SetImageList(m_imagelist,LVSIL_STATE);
看上去没有什么问题,于是我自己建了一个工程,把代码拷上去测试,发现确实不行,没办法,我开始检查一行行代码,先看Create函数,查看MSDN,上面的解释也没有很特别的地方,再看CBitmap加载BMP文件的过程,也没有问题,ImageList::Add函数使用似乎也是对的,接着看m_list.SetImageList(m_imagelist,LVSIL_STATE);发现后面MSDN的原型:
CListCtrl::SetImageList
This method assigns an image list to a list view control.
CImageList* SetImageList(
CImageList* pImageList,
int nImageListType );
Parameters
pImageList
Specifies the pointer to the image list to assign.
nImageListType
Specifies the type of image list. It can be one of these values:
- LVSIL_NORMAL Image list with large icons.
- LVSIL_SMALL Image list with small icons.
- LVSIL_STATE Image list with state images.
Return Value
A pointer to the previous image list.
看上去也没有什么问题,但是我不死心,就一个个参数设置,发现用LVSIL_NORMAL效果确实不同,但是BMP还是没有显示,同时我发现Add后,ImageList::GetImageCount的返回值居然还是0!看来是加载没成功,没办法了,只有拿出最后的杀手锏google了。
在众多结果中找呀找,发现了我干兴趣的http://tc.0728.org/News/145181.html,这个上面有人提到也Create时的尺寸有关系,尺寸必须与加载的BMP完全一样,我一看,我用的是30*30的,确实不一样,改了后发现Add后,ImageList::GetImageCount为1了!看来现在BMP已经加载进了ImageList里面,但是一运行程序,发现函数没有显示。后面我又改变CListCtrl::SetImageList的第二个参数,发现改成LVSIL_SMALL后BMP能正常显示了。我的代码如下:
1: m_imagelist = new CImageList();
2: m_imagelist->Create(30,30,ILC_COLOR32,0,4);
3:
4: HBITMAP hBitmap;
5: CBitmap *pBitmap;
6: CString FilePathName = "D://face.bmp"; //在资源的IDB_BITMAP1文件就是face.bmp导入的
7: pBitmap = new CBitmap;
8: //从文件导入位图
9: hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FilePathName,
10: IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
11: pBitmap->Attach(hBitmap);
12: m_imagelist->Add(pBitmap, RGB(0,0,0));
13:
14: if (m_imagelist->GetImageCount() == 0)
15: {
16: CString strMsg;
17: strMsg.Format("加入BMP失败!%d", GetLastError());
18: AfxMessageBox(strMsg);
19: }
20:
21: m_list.SetImageList(m_imagelist,LVSIL_SMALL );
22: int Item = m_list.InsertItem(0, "2010-11-05", 0);
唉!不容易呀,虽然最后BMP可以显示了,但是我心里面也出现了好多不理解的地方,为什么SetImageList后面的参数不一样BMP不会正常显示呢?难道是我的用法不对?为什么ImageList::Create的尺寸设置会导致ImageList::Add添加不进去呢?在MSDN上为什么没有针对的说明呢?希望对这个比较了解的朋友能为我解惑,谢了!
最后附上我测试程序的下载http://download.csdn.net/source/3249605
分享到:
相关推荐
ImageList加载BMP在ListCtrl中显示的Demo,一个测试Demo,没什么好说明的了,
如果你看见别的系统中ImageList有很多自己想要的图片的话,可以用我写的小程序,可以得到当前ImageList所有的图片
mfc 使用imagelist 实现richedit显示gif
VB6.0通过ImageList加载资源文件的ICO设置给ToolBar中的按钮
VB使用ImageList显示并叠加 图像.rar
MFC tabctrl控件重载, 实现标签加载BMP图片, 美化标签. 花了很多积分,现在免费给好学者参考,不容易啊!
用多张*.ICO,*.BMP,*.JPG,*.GIF,*.PNG,*.TIF或者其他图片制作工具图片条。支持16X16, 24X24,32X32,48X48大小的图像输入,特别地,可以自定义将要生成图标的尺寸。支持透明色:图片背景色可设置为透明,用户可选择何...
详细的描述了bmp位图的整个结构 并记录了如何加载bmp位图的所有信息
ImageList控件应用实例,ImageList控件应用实例 VB
c#imagelist
读取ImageList中的图片.rar QQ:292258449
toolbar和imagelist搭配做的工具栏
VB6 ListView与ImageList实例
在vc .net编程时,你想免去手工一个一个制作imagelist图像列表的烦恼吗,该软件能解决此问题,并附带有源代码,支持无限扩展。
ImageList和鼠标提示的应用,数据库链接,(VB6.0源代码编写) ImageList和鼠标提示的应用。 QQ223857666勾月guocan@msn.cn
使用listview和imagelist控件写的一个简单的菜单,可以调用外部程序。
imagelist显示图片。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
delphi fmx android-imagelist 获取图片
ImageList控件显示QQ头像列表.rarImageList控件显示QQ头像列表.rar