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

项目地址: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编辑器能一直免费使用。。。

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值