我们知道通过CImageList可以让listctr显示出图片,但是添加的图片大小必须和要CImageList 创建的图片大小一致,才能显示出来。最近遇到一个需求,需要把很多大小不一的jpeg图片通过列表框来显示出缩略图。

首先创建指定大小的CImageList

 void CListEx::setCreateImageList(int iWidth, int iheight)
{
m_iImageWidth = iWidth;
m_iImageHeight = iheight;
m_imageList.Create(m_iImageWidth, m_iImageHeight, ILC_COLOR32, , );
SetImageList(&m_imageList, LVSIL_SMALL);
}

采用Gdi来缩放的,路径为图片的路径,jpeg也支持,不需要转换格式

void CListEx::AddImage(LPCSTR imagePath)
{
WCHAR path[] = { };
::MultiByteToWideChar(CP_ACP, , (const char *)imagePath, strlen(imagePath), path, sizeof(path)); Gdiplus::Bitmap bmp(path); int sourceWidth = m_iImageWidth;
int sourceHeight = bmp.GetHeight(); if (sourceHeight > m_iImageHeight)
{
sourceHeight = m_iImageHeight;
}
else
{
sourceHeight = bmp.GetHeight();
} //设定缩略图的大小
Gdiplus::Bitmap* pThumbnail = (Gdiplus::Bitmap*)bmp.GetThumbnailImage(sourceWidth, sourceHeight, NULL, NULL);
HBITMAP hBmp; pThumbnail->GetHBITMAP(Gdiplus::Color(LIST_BKCOLOR), &hBmp);
CBitmap *pImage = CBitmap::FromHandle(hBmp); m_imageList.Add(pImage, RGB(, , )); // 下面的代码,如果没有,会产生内存泄漏
delete pThumbnail;
pThumbnail = NULL;
pImage->DeleteObject();
pImage->DeleteTempMap();
}

别忘了初始化gdi,在CXXXApp::InitInstance()里添加初始化代码

    //初始化Gdi+
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

在CXXXApp::ExitInstance()里添加关闭gdi代码

Gdiplus::GdiplusShutdown(m_gdiplusToken);

在CXXXApp的头文件里添加m_gdiplusToken的声明

ULONG_PTR m_gdiplusToken;

MFC CListctr显示缩略图的更多相关文章

  1. MFC对话框显示BMP图片

    1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...

  2. 在MFC[转载]在MFC状态栏显示时间 状态栏显示时间

    原文:在MFC状态栏显示时间,谢小哈皮儿 c/c++ vc 在mfc状态栏显示时间,在VC的控件中有个Status bar可以在窗体状态栏中添加日期和时间.其实通过简单的代码,你就能创建一个有时钟显示 ...

  3. Js实现input上传图片并显示缩略图

    用这个方法就可以很方便快捷的实现上传图片并显示缩略图的效果: FileReader 的 readAsDataURL() 先创建一个img标签,再用 fileReader 把input文件的赋值到img ...

  4. 使用 Sixel 图形格式在终端中显示缩略图

    不久前,我们讨论了 Fim,这是一个轻量级的命令行图像查看器应用程序,用于从命令行显示各种类型的图像,如 bmp.gif.jpeg 和 png 等.今天,我偶然发现了一个名为 lsix的类似工具.它类 ...

  5. MVC图片上传并显示缩略图

    前面已经说了怎么通过MVC来上传文件,那么这次就说说如何上传图片然后显示缩略图,这个的实用性还是比较大.用UpLoad文件夹来保存上传的图片,而Temp文件夹来保存缩略图,前面文件上传部分就不再重复了 ...

  6. PotPlayer 进度条显示缩略图

      PotPlayer设置鼠标放在播放器进度条任意位置显示缩略图 迁移时间--2017年8月9日15:41:27Author:Marydon 右键-->选项(F5)-->点击左侧面板上的“ ...

  7. windows设置文件夹显示缩略图

      windows设置文件夹显示缩略图 CreateTime--2017年7月26日16:32:59Author:Marydon 为什么要显示缩略图? a.显示缩略图后,图片文件能够直接显示内容,不能 ...

  8. MFC上显示摄像头JPEG图片数据的两种方法

    其一是借助opencv,其二是利用流对象. 方法一: CvMat *mat; ,,CV_8UC1); ,,CV_8UC1,JPEGBuf); /*初始化矩阵信息头,这里的JPEGBuf就是JPEG图像 ...

  9. 3种终极方法,彻底解决CDR不显示缩略图!

    站长所在的印刷出版行业,一般都是使用版本较低的CDR软件,以便更好的兼容出版厂,不然新版本的文件发厂出片时却打不开,而转低版本的话又容易出错.从最开始的 CorelDRAW 9 到现在的 CORELD ...

随机推荐

  1. 优化数据页面(20)——1:n的数据关系

    设计要点:优化数据页面.界面设计.美化exce 阿金:那一对多的关系-- 秀秀:不是:n结构么? 阿金:嗯,这俺知道.俺特别喜欢这样的格式,那样显得非常上档次! 秀秀:俺也喜欢. 由于页面上有空白,认 ...

  2. 轻松学习之Linux教程四 神器vi程序编辑器攻略

    本系列文章由@超人爱因斯坦出品,转载请注明出处.           文章链接:          http://hpw123.net/a/Linux/Linuxjichu/2014/1026/93. ...

  3. Shiro架构及其组件

    Shiro可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等.这不就是我们想要的嘛,而且Shiro的API也是非常简单:其基本功能点如下图所示: Authentication:身份认证 ...

  4. Codeforces Round#320 Div2 解题报告

    Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Fin ...

  5. LDAP实现企业异构平台的统一认证

    LDAP实现企业异构平台的统一认证      技术是为应用服务的,没有应用,技术就无用武之地.同样光配置完LDAP服务器没有任何意义,只有把所有需要认证的环节,只有纳入LDAP系统中,才能使它发挥应有 ...

  6. JAVA学习书籍

    1 java编程思想(第四版) 2 head first servlet &jsp

  7. Yeslab华为安全HCIE七门之--防火墙高级技术(17篇)

    Yeslab 全套华为安全HCIE七门之第三门 防火墙高级技术     课程目录: 华为安全HCIE-第三门-防火墙高级技术(17篇)\1_用户认证_用户_认证域_认证策略.avi 华为安全HCIE- ...

  8. SpringBoot @PathVariable 和 @requestParam区别

    1.若获取的入参的 参数 是下面这种形式 就使用 @requestParam 去获取 参数‘1’ /user?id=1 // url:xxx/user?id=1 @RequestMapping(&qu ...

  9. 【Henu ACM Round#18 A】 Multiplication Table

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 遍历i从1..n 看看x%i==0以及x/i<=n是否成立. [代码] #include <iostream> u ...

  10. Android学习总结(2)——App客户端与服务器交互中的token

    学习Token Token是什么? Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Tok ...