DirectUI方腾文件管理器一:windows制作一个文件管理器最纯粹的办法

项目地址:https://github.com/KnIfER/FilesTen-Explorer

通过这个项目,虽然不能让我的DirectUI分支腾飞,但能让里边的Listview成熟。

“最纯粹”,指的是最直接,最简单的方法。比如缩略图通过shellapi获取,不过十几行代码。

步骤:

一、

粗略搜索了下,开源的文件管理器,国外有基于uwp做的,国内有基于wpf做的。uwp 测试了下还是比较卡顿,鼠标点下去,有很明显的延迟。wpf做的 explorerex 也有比较高的完成度,但仍不稳定,比如一直占用着gpu。

可以从这里批量下载一些壁纸待用。DirectUI方腾文件管理器一:windows制作一个文件管理器最纯粹的办法_第1张图片

二、

用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编辑器能一直免费使用。。。

DirectUI方腾文件管理器一:windows制作一个文件管理器最纯粹的办法_第2张图片

你可能感兴趣的:(DuiLib,无限的ListView,桌面GUI新技术,directui,duilib,windows)