`

CListCtrl和CImageList显示缩略图,图片自动排列。

    博客分类:
  • VC++
EXT 
阅读更多

的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并没有绘出图片。

分享到:
评论

相关推荐

    CListCtrl的图片格式 关联CImageList,显示缩略图

    在标题"‘CListCtrl的图片格式 关联CImageList,显示缩略图"中,我们关注的是如何使用CListCtrl显示图片,特别是缩略图。首先,我们需要创建一个CImageList对象,并加载或创建要显示的图像。这可以通过调用...

    Clistctrl 控件的缩略图

    在MFC中,CImageList类可以用来存储和管理图标或图片,我们可以将生成的缩略图添加到CImageList中,然后将其与CListCtrl关联,以便在列表中显示。 总结起来,实现CListCtrl控件的缩略图功能,我们需要以下步骤: 1...

    CListCtrl中列表显示任意图片

    本篇文章将深入探讨如何在CListCtrl中显示任意图片,通过结合使用CImageList类来实现这一功能。 首先,我们需要了解CListCtrl的基本用法。CListCtrl是一个视图类,它继承自CWnd,用于创建一个包含多列和多行的列表...

    CListCtrl 显示图片

    CListCtrl的图片功能主要通过两种方式实现:图标和缩略图。图标通常用于显示较小的固定尺寸图像,而缩略图则可以显示较大、比例不固定的图像。MFC提供了两种类型的图片列表:LVIL_TYPE_IMAGE(图标列表)和LVIL_TYPE...

    Listcontrol 缩略图显示功能的实现

    要实现在Listcontrol中显示缩略图,首先需要了解ListView的自定义视图和图像列表(CImageList)的概念。在默认情况下,Listcontrol不支持直接显示缩略图,因此我们需要对其进行扩展。以下是实现这个功能的关键步骤:...

    thumbnail_clistctrl_gdiplus_src.zip_CListCtrl gdiplus_文件缩略图

    它可能包含了对CListCtrl类的派生,添加了新的成员函数和数据成员,以处理缩略图的加载、显示和更新。这里可能会用到GDI+的Image类来加载和处理图像,使用Graphics类进行绘制,以及使用Bitmap类来存储和操作图像数据...

    基于MFC扩展CListCtrl子项显示图片并叠加文字

    总的来说,实现“基于MFC扩展CListCtrl子项显示图片并叠加文字”的过程涉及了MFC的控件派生、自定义绘制、图像处理和资源管理等多个方面,这是一个典型的Windows桌面应用程序开发中的高级功能实现。通过这个实践,...

    CListCtrl 图片显示管理

    总之,`CListCtrl`的图片显示管理涉及了Windows API和MFC库的深度使用,通过扩展和定制,可以实现复杂的数据和图像管理功能。在设计和实现这样的功能时,应充分考虑性能、用户界面的友好性和代码的可维护性。

    MFC实现多幅图片预览显示

    在这个案例中,我们将使用CListCtrl来显示图片的缩略图。为了在CListCtrl中显示图片,我们需要自定义列表视图,并重写OnDrawItem()函数来绘制每个列表项。 1. **创建CListCtrl对象**: 在MFC应用程序的主对话框中...

    CListCtrl控件中的第一列添加图片

    1. **设置图像列表**: 在CListCtrl中添加图片,我们需要先创建一个CImageList对象,用来存储所有的图片。这可以通过调用CImageList的Create方法实现,参数包括图像的大小、颜色深度等。然后,使用SetImageList方法将...

    CListCtrl实现icon显示示例

    本示例主要介绍如何使用CListCtrl控件来显示图标,使得应用程序界面更加直观和友好。CListCtrl不仅可以显示文本,还能展示图像,这对于创建具有自定义视图的应用程序非常有用。 1. **CListCtrl基本概念** ...

    MFC源代码 列表控件CListCtrl加载图片与文字

    主要通过CListCtrl::InsertColumn、InsertItem、SetItemText向列表插入数据,CImageList插入BMP图片或ICON图标.是博客文章http://blog.csdn.net/eastmount/article/details/20085489的源程序,只是显示图片和文字,并...

    clistctrl列加载任意图片作为每行图标

    在【标题】中提到的“clistctrl列加载任意图片作为每行图标”是指如何在`CListCtrl`中自定义每一行显示的图标,而不仅仅是系统默认的图标。这通常是通过编程实现动态加载图片资源或者从外部文件读取图片来实现的。 ...

    mfct图片缩略图

    可以考虑使用缓存策略,只在需要时加载和显示缩略图,以减少内存消耗。 9. **错误处理**: - 需要处理可能出现的各种错误,如图片加载失败、磁盘空间不足、用户权限问题等,确保程序的稳定性和用户体验。 10. **...

    vc++实现图像缩略图显示

    在显示缩略图时,你需要将GDI+加载的图像转换为CBitmap对象,然后使用CDC在窗口上绘制。 6. **多线程处理**:为了提高用户体验,可以考虑在后台线程中异步生成缩略图,避免阻塞UI。这需要理解Windows的消息机制和...

    CListCtrl显示数据

    在Windows编程中,`CListCtrl` 是MFC...`DemoList`这个示例可能包含了创建、填充和操作`CListCtrl`的各种实例代码,是学习和理解`CListCtrl`的好资料。通过实践和调试这些示例,可以更好地掌握`CListCtrl`的使用技巧。

    推荐一个支持类似CListCtrl支持自动换行的控件

    然而,CListCtrl默认并不支持文本的自动换行,这可能会导致长字符串无法完全显示,从而影响用户体验。在这种情况下,我们需要寻找或创建一个支持自动换行的替代控件。 在提供的文件名"MultilineList.cpp"和...

    MFC 列表控件CListCtrl加载类似QQ界面的头像与文字1

    在MFC应用开发中,CListCtrl控件是用于创建列表视图的...这个过程展示了如何结合使用MFC的CListCtrl和CImageList控件来创建具有图像和文本的自定义列表视图,适用于创建类似QQ聊天界面或者其他需要显示图文信息的界面。

    旧版---自绘CLISTCTRL 缩略图,详细信息,部分功能控制_v0.00

    开发者可能使用了GDI+或第三方库如libpng来处理图像,同时在`FileInfoControl.cpp`和`.h`文件中定义了相关的类和方法,用于从文件中读取并显示缩略图。 3. **详细信息**: 除了缩略图,CLISTCTRL还可以展示文件的...

    ClistCtrl控件实现icon和report两种带图标的列表显示模式

    本篇主要探讨的是如何利用MFC中的CListCtrl控件来实现图标(Icon)和报告(Report)两种带图标的列表显示模式。 CListCtrl是MFC提供的一个视图类,用于创建类似Windows资源管理器的列表视图。它可以显示文本、图标...

Global site tag (gtag.js) - Google Analytics