缩略图显示

2023-05-16

首先将你的CListCtrl风格设置为ICON风格

CImageList  m_ImageList;

CListCtrl    m_list;

 

m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

m_list.SetIconSpacing(CSize(140, 130));     //set pictures spacing

//wide of picture is 120,height is 90

m_ImageList.Create(120,90,ILC_COLORDDB|ILC_COLOR32,1,1);

m_list.SetImageList(&m_ImageList,LVSIL_NORMAL);     //CImageList associates CListCtrl

 

//此处用GDI+,

Bitmap bmp(文件的相对或绝路径);                //传入图片路径

int sourceWidth = 120;                                           //获得图片宽度,这个120和创建的120保持相同。

int sourceHeight = bmp.GetHeight();                 //获得图片宽度                                  

if(sourceHeight>120)             / /m_ImageList.Create(120)有很大关系,如果小于设

                         //定的宽度,图片将无法显示。

{

    sourceHeight=120;

}

else

{

    sourceHeight=bmp.GetHeight();

}

 

Bitmap* pThumbnail = (Bitmap*)bmp.GetThumbnailImage(sourceWidth , sourceHeight , NULL, NULL); //设定缩略图的大小

HBITMAP hBmp;

pThumbnail->GetHBITMAP(Color(255,255,255),&hBmp);

CBitmap *pImage = CBitmap::FromHandle(hBmp);         //转换成CBitmap格式位图

 

 

_wsplitpath(*photo_iter ,drive,dir,fname,ext );

wcscpy_s(itemName,fname);

wcscat_s(itemName,ext);

 

int a=m_imageList.Add(pImage,RGB(255,255, 255));

m_pictureList.InsertItem(a,itemName,a);               // itemName,你自己设法得到图片片的名字。名字会显示在图片下面。

 

//这里要注意,一定要用InsertItem(a,itemName,a);之前的m_list不需要在insert(I,_T(””));更不需要setItemText(item,subItem,Text),这可能会导致插入相同的图片。

 

顺便说下GDI这个鬼东西,不懂原理,直接说应用。会用的高手见笑。VS2008自带了gdi+,不需要下载。

1.声明头文件,在stdafx中,或者能被你编译到其他地方都可以。

#include <gdiplus.h>             //GDI+声明,可以GDI/GDI+混合使用

#pragma comment(lib, "gdiplus.lib")

using namespace Gdiplus;

2.初始化GDI+,

CMyApp: public CWinApp

{

  …………

    ULONG_PTR m_gdiplusToken;

…………

};

BOOL CMyApp::InitInstance()    //在这个函数中添加

{

    //初始化GID+

    GdiplusStartupInput gdiplusStartupInput;      

    GdiplusStartup( &m_gdiplusToken,&gdiplusStartupInput,NULL );

}

int CMobilePCApp::ExitInstance()      //释放GDI+调用,这个函数需要自己写。别忘了声明。

{

    GdiplusShutdown( m_gdiplusToken );

    return CWinApp::ExitInstance();

}

当时这样做了后,我的GDI+还是不能用,添加图片时候Bitmap bmp(文件的相对或绝路径); bmp这个东西无效,里面有个空指针的东西,可见GDI+并没有初始化。后来先,初始化GDI+这段代码没有执行到。好了,那就把初始化的代码放到可以执行到的地方。

在主对话框的InitInstance()中添加

    //初始化GID+

    GdiplusStartupInput gdiplusStartupInput;      

    GdiplusStartup( &m_gdiplusToken,&gdiplusStartupInput,NULL );

好了,GDI+可以使用了,可以添加缩略图了。截图一张。

 

 

每行图片的数量随窗口大小自动排列。按下面设置属性。

CListCtrl属性 Alignment设置为top Auto Arrage设置为True.

如有疑问,请留言。

 

 

//ClimageList无效的原因 1,creare的大小;2,如果是被重写的类,在drawItem重新绘制,不能在关联CImageList

.h CListCtrlCl             m_dataStatisticsList; CImageList              m_DataImageList;

.cpp
        m_DataImageList.Create(44,30,ILC_COLOR24,2,2); //bmp.Attach(tempBitmap); bmp.LoadBitmap(IDB_CONTACT); int a=m_DataImageList.Add(&bmp,RGB(255,255,255)); int b=m_DataImageList.GetImageCount();

m_dataStatisticsList.SetImageList(&m_DataImageList,LVSIL_SMALL); for(int i=0;i<5;i++) {      m_dataStatisticsList.InsertItem(i,_T(""),0); //0是CImageList的第一个图标。 }

分析:在m_DataImageList.Add(&bmp,RGB(255,255,255));之后,得到的CImageList的元素数量b还为0,原因可能在于 m_DataImageList.Create(44,30,ILC_COLOR24,2,2); 前两个参数图片的宽度和长度大于了图片本身,就会add失败。

在add成功后,b将成为1。 但是 m_dataStatisticsList.InsertItem(i,_T(""),0); 还不见图片,插入的文字倒是没有问题。 这个原因在于m_dataStatisticsList是一个被重写的类CListCtrlCl的对象。在CListCtrlCl中的drawItem并没有绘出图片。

转载于:https://www.cnblogs.com/Dennis-mi/articles/3312649.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

缩略图显示 的相关文章

  • 超详细讲解长度受限制的字符串函数(保姆级教程!!!)

    超详细讲解长度受限制的字符串函数 xff08 保姆级教程 xff01 xff01 xff01 xff09 长度受限制的字符串函数strncpy函数strncpy函数的使用strncpy函数的模拟实现 strncat函数strncat函数的使
  • 超详细讲解字符串查找函数(保姆级教程!!!)

    超详细讲解字符串查找函数 xff08 保姆级教程 xff01 xff01 xff01 xff09 字符串查找函数strstr函数strstr函数的使用strstr函数的模拟实现 strtok函数strtok函数的使用strtok函数的模拟实
  • 超详细讲解线性表和顺序表!!

    超详细讲解线性表和顺序表 xff01 xff01 线性表顺序表顺序表的概念及结构静态顺序表动态顺序表 顺序表接口实现1 创建2 初始化3 扩容4 尾插5 打印6 销毁7 尾删8 头插9 头删10 插入任意位置11 删除任意位置12 查找13
  • Leetcode—移除元素、删除有序数组中的重复项、合并两个有序数组

    移除元素 此题简单 xff0c 用双指针方法即可 xff0c 如果右指针指向的元素不等于val xff0c 它一定是输出数组的一个元素 xff0c 我们就将右指针指向的元素复制到左指针位置 xff0c 然后将左右指针同时右移 xff1b 如
  • 超详细讲解C语言文件操作!!

    超详细讲解C语言文件操作 xff01 xff01 什么是文件文件名 文件的打开和关闭文件指针文件的打开和关闭 文件的顺序读写文件的随机读写fseekftellrewind 文本文件和二进制文件文件读取结束的判定文件缓冲区 什么是文件 磁盘上
  • windows HLK server部署操作步骤

    Windows Hardware Lab Kit HLK 是微软官方提供的一个测试工具组 xff0c 也是windows系统认证工具 The Windows Hardware Lab Kit Windows HLK is a test fr
  • 超详细讲解Java的数据类型与变量

    超详细讲解Java的数据类型与变量 字面常量数据类型变量整型变量长整型变量短整型变量字节型变量 浮点型变量双精度浮点型单精度浮点型 字符型变量布尔型变量 转换自动类型转换 隐式 强制类型转换 显式 类型提升 字面常量 在System Out
  • java.lang.instrument ASSERTION FAILED ***: “error

    java lang instrument ASSERTION FAILED error 61 61 JVMTI ERROR NONE at Reentrancy c line 161 问题记录 应该是jdk版本更新的问题 第一次运行代码时出
  • C语言实现汉诺塔问题(保姆式讲解)

    前言 大家好 xff0c 又是再一次分享文章 xff0c 我十分感谢各位能够点开这篇花费我颇多时间才解决的汉诺塔问题 xff0c 接下来我就要分享一下自己的所思所想 xff0c 希望能给各位带来一些不一样的收获吧 提醒 汉诺塔问题的本质是函
  • Ubuntu20.04下基于ROS和PX4的无人机仿真平台的基础配置搭建(我所遇到的问题)

    写在前面 xff1a 我目前也处于学习阶段 xff0c 当时按照ROS教程安装的20 04 xff0c 随后搭建XTDrone阶段因为版本问题出现了很多问题 xff0c 这是我根据问题 xff0c 检索后汇总的一些解决措施 本文中提到的问题
  • for 循环无限循环ing....

    题目没思路 xff0c 有思路无法各种错误 xff0c 基础不牢 xff0c 程序的本质理解不透彻 头疼
  • ER图学习笔记(附各个图型的举例,实战案例)

    ER图常用图形如下 xff1a ER图图形含义详解 实体 xff08 长方体 xff09 xff1a 实体字面意思就是实际存在的 xff0c 例如商品 xff0c 货物 xff0c 用户 属性 xff08 椭圆 xff09 xff1a 属性
  • Visual Stdio 2022 C语言源文件调试教程

    下面是一个简单的C语言程序 xff0c 我将以它为例说明如何进行VS2022调试 include lt stdio h gt int main int a b sum a float x y sum b scanf s 34 d d 34
  • 选择排序法和冒泡排序法的比较

    本篇以对元素从小到大有序排列为例 xff0c 比较了选择排序法和冒泡排序法的相同点和不同点 同 xff1a 1 循环结构相同 xff1a 均采用了与i有关的for循环和与j有关的for循环的双层嵌套模式 2 最后结果相同 xff1a 均实现
  • Npm包管理版本机制

    Npm是什么 npm是世界上上 xff0c 使用最广泛的软件管理工具 xff0c 是运行时 Node js 的默认程序包管理器 NPM版本机制 版本号规范 npm是通过版本机制来解决的依赖机制 npm的规范的标准版本号采用 X Y Z 的格
  • to String语句的作用和用法

    在 Java 中 xff0c toString 方法是 Object 类中的一个方法 xff0c 用于返回对象的字符串表示 当我们打印一个对象时 xff0c 实际上是调用了该对象的 toString 方法 如果没有重写该方法 xff0c 将
  • KVM 环境搭建(Base on Ubuntu)

    Kernel based Virtual Machine的简称 xff0c 是一个开源的系统虚拟化模块 xff0c 自Linux 2 6 20之后集成在Linux的各个主要发行版本中 Use the latest kernel of the
  • 为什么这里的int型指针变量为8字节

    include lt stdio h gt void test1 int main test1 return 0 void test1 int num 61 100 取变量地址用 amp amp num代表标量的num的起始地址 print
  • C语言字符查找

    include lt string h gt include lt stdio h gt int main void char string 101 gets string char ptr c scanf 34 c 34 amp c pt
  • 使用vs2022遇到的一些问题

    小白的C语言之路 目录 前言 一 vs2022是什么 xff1f 二 我遇到的几个问题 1 字体调整在哪呢 xff1f 2 同一个项目中练习 xff0c 建立了多个源文件怎么办 xff1f 3 不小心关掉了错误列表 xff0c 解决方案资源

随机推荐