项目地址:https://github.com/KnIfER/FilesTen-Explorer
通过这个项目,虽然不能让我的DirectUI分支腾飞,但能让里边的Listview成熟。
“最纯粹”,指的是最直接,最简单的方法。比如缩略图通过shellapi获取,不过十几行代码。
步骤:
一、
粗略搜索了下,开源的文件管理器,国外有基于uwp做的,国内有基于wpf做的。uwp 测试了下还是比较卡顿,鼠标点下去,有很明显的延迟。wpf做的 explorerex 也有比较高的完成度,但仍不稳定,比如一直占用着gpu。
可以从这里批量下载一些壁纸待用。
二、
用ListView显示图片列表:
数据:
std::vector<QkString> fileArr{
"D:\\MUSE\\卡通\\高清壁纸 (1).jpg"
, ……
};
ListView适配器接口:
size_t GetItemCount()
{
return fileArr.size();
}
CControlUI* CreateItemView(CControlUI* view, int type)
{
return new ImageView();
}
void OnBindItemView(CControlUI* view, size_t index)
{
CControlUI* btn = dynamic_cast<CControlUI*>(view);
ImageView* img = dynamic_cast<ImageView*>(view);
if (img)
{
string buffer;
img->LoadThumbnailForFile((CHAR*)fileArr[index].GetData(buffer));
}
view->SetNeedAutoCalcSize();
}
img->LoadThumbnailForFile 方法是从文件获取宽高适应1024像素的缩略度,具体实现见仓库。
结果展示:
DUI方腾文件管理器制作过程:用ListView显示图片列表
竟然不是很卡。
最大化也不怵,一直滑动鼠标滚轮,能耗low至moderate,内存占用稳定在二十来兆。
三、
扫描文件
win32 扫描文件好像没有简洁的办法,要用findfile,之前写过一篇。
展望
其实这种图片展示,还是要用gpu加速的库来做。希望能有时间,将Listview整套逻辑搬到基于direct2d的vuilib中,或者把vuilib嵌入到duilib中去。
c++还是比较难,用cursor编辑器试了试,竟然能够理解每个方法的作用。。。还能些处vector排序的代码片段,并解释各处作用,省的手写lambda了!Android studio 我都是先写 new 再按需优化成 lambda,c++手写lambda还不大习惯。
希望这个ai编辑器能一直免费使用。。。