mfc 图片列表显示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mfc 图片列表显示相关的知识,希望对你有一定的参考价值。
参考技术A 你可以先用CFileFind搜索指定目录下的文件,把所有图像文件的路径保存在一个CStringList中,然后在按钮响应函数中调用Invalidate,引起重画,在OnDraw中写显示图片的代码。在属性里,有个选项他默认是框架,你改成位图,下面填入你的位图ID,如果是外部图片,你先把图片改成bmp格式存入你的工程目录的res文件夹中,然后再引入到工程中。
mfc以C++类的形式封装了WindowsAPI,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
MFC CListctr显示缩略图
我们知道通过CImageList可以让listctr显示出图片,但是添加的图片大小必须和要CImageList 创建的图片大小一致,才能显示出来。最近遇到一个需求,需要把很多大小不一的jpeg图片通过列表框来显示出缩略图。
首先创建指定大小的CImageList
1 void CListEx::setCreateImageList(int iWidth, int iheight) 2 3 m_iImageWidth = iWidth; 4 m_iImageHeight = iheight; 5 m_imageList.Create(m_iImageWidth, m_iImageHeight, ILC_COLOR32, 20, 1); 6 SetImageList(&m_imageList, LVSIL_SMALL); 7
采用Gdi来缩放的,路径为图片的路径,jpeg也支持,不需要转换格式
void CListEx::AddImage(LPCSTR imagePath) WCHAR path[512] = 0 ; ::MultiByteToWideChar(CP_ACP, 0, (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(255, 0, 255)); // 下面的代码,如果没有,会产生内存泄漏 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 图片列表显示的主要内容,如果未能解决你的问题,请参考以下文章