Visual Studio 2015 C++应用如何实现文件夹内图片顺序遍历跳转
实现方案参考
1. 文件夹图片遍历实现
基于VS2015的C++开发环境,不需要额外引入复杂工具就能完成遍历逻辑,两种常用实现路径:
- 若项目基于MFC框架开发:直接调用内置的
CFileFind类完成文件遍历,过滤.png/.jpg/.bmp等常用图片后缀,将匹配到的文件绝对路径按你需要的顺序(文件名升序/创建时间排序等)存入std::vector<CString>或std::vector<std::string>容器中。 - 若项目是纯Win32开发不依赖MFC:用Win32原生API
FindFirstFile()、FindNextFile()组合实现遍历,过滤规则和路径存储逻辑和上述方案一致。
注意如果要做文件名自然排序,不要直接使用字符串默认比较逻辑,避免出现
10.jpg排在2.jpg前面的不符合预期的排序结果。
附上MFC下遍历图片的极简示例代码:
std::vector<CString> imgPathList; CFileFind finder; BOOL isWorking = finder.FindFile(_T("你的目标文件夹路径\\*.*")); while (isWorking) { isWorking = finder.FindNextFile(); // 跳过文件夹和系统特殊标记 if (finder.IsDirectory() || finder.IsDots()) continue; CString fileExt = finder.GetFileExt().MakeLower(); // 匹配支持的图片后缀 if (fileExt == _T("jpg") || fileExt == _T("jpeg") || fileExt == _T("png") || fileExt == _T("bmp")) { imgPathList.push_back(finder.GetFilePath()); } } // 此处按需添加排序逻辑对imgPathList做排序
2. 图片导航功能实现
导航逻辑完全可以自主实现,不需要依赖第三方组件,仅需维护两个类成员变量即可:
- 整型下标变量
int m_currentImgIndex:记录当前展示的图片在路径容器中的位置,初始值设为0 - 路径容器
std::vector<CString> m_imgPathList:存储第一步遍历得到的所有图片路径
左右按钮点击事件的处理逻辑:
- 上一张按钮:判断
m_currentImgIndex > 0时,将下标减1,加载对应路径的图片渲染到显示区域;如果下标已经等于0,可做边界拦截(比如按钮置灰/弹出提示) - 下一张按钮:判断
m_currentImgIndex < m_imgPathList.size() - 1时,将下标加1,加载对应路径的图片渲染到显示区域;到达最后一张时同理做边界拦截
3. 图片加载渲染方案
如果不想手写图片解码逻辑,推荐两个轻量无额外依赖的方案:
- GDI+:VS2015原生支持,不需要额外引入依赖库,支持常见格式图片的加载和渲染,初始化GDI+环境后调用
Gdiplus::Image::FromFile()传入图片路径即可拿到图片对象,直接绘制到显示控件的DC上即可 - stb_image:单头文件开源库,仅需把
stb_image.h放入项目目录引入即可,解码得到图片RGB数据后自行通过GDI绘制到窗口,适合不想引入GDI+的场景
内容的提问来源于stack exchange,提问作者emma
相关产品推荐
相关产品推荐

