Duilib实现 Windows资源管理器前进后退原理
一、用两个vector保存路径
vector<wstring> vctBacks;//保存后退路径的集合
vector<wstring> vctForwards//保存前进路径集合
CButtonUI* pBackbtn;//后退按钮
CButtonUI* pForwardbtn;//前进按钮
1.程序初始化时,两个按钮不可用状态
2.当点击一系列目录后,后退集合把这些路径保存,后退按钮设为可用状态
3.当点击后退按钮,把vctBacks最后一个元素取出来 wstring temp = vctBacks.back(),放进前进集合里 vctForwards.push_back(temp),然后后退集合删除掉最后一个 vctBacks.pop_back()
4.再点击前进按钮,把vctForwards最后一个元素取出来 wstring temp = vctForwards.back(),,放进前进集合里 vctBacks.push_back(temp),然后后退集合删除掉最后一个 vctForwards.pop_back()
5.若前进集合还有一个元素时,取出元素push到后退集合里。然后把前进按钮设为不可用;若后退集合还有一个元素时,取出元素push到前几集合里,然后把后退按钮设为不可用
void OnClickBtnForward()
{
if (m_vctForwards.size() > )
{
if (m_vctForwards.size() == )
{
wstring wstr = m_vctForwards.back();
CListLabelElementUI* pElement = (CListLabelElementUI*)(m_pLeftTree->FindSubControl(wstr.c_str())); if (pElement)
{
pElement->Select();
} m_vctBacks.push_back(wstr);
m_vctForwards.pop_back(); if (m_vctForwards.empty())//在此判断有点多余
{
m_pForwardbtn->SetEnabled(false);
} if (!m_vctBacks.empty())
{
m_pBackbtn->SetEnabled(true);
} m_pPath->SetText(wstr.c_str());
m_pFileList->RemoveAll();
InitFileList(wstr.c_str());
return;
}
else
{
wstring temp = m_vctForwards.back();
m_vctBacks.push_back(temp);
m_vctForwards.pop_back();
temp = m_vctBacks.back(); CListLabelElementUI* pElement = (CListLabelElementUI*)(m_pLeftTree->FindSubControl(temp.c_str()));
if (pElement != NULL)
{
pElement->Select();
} if (!m_vctBacks.empty())
{
m_pBackbtn->SetEnabled(true);
} m_pFileList->RemoveAll();
InitFileList(temp.c_str());
m_pPath->SetText(temp.c_str());
}
}
} void OnClickBtnBack()
{
if (m_vctBacks.size() > )
{ if (m_vctBacks.size() == )
{
wstring wstr = m_vctBacks.back();
CListLabelElementUI* pElement = (CListLabelElementUI*)(m_pLeftTree->FindSubControl(wstr.c_str())); if (pElement)
{
pElement->Select();
}
m_vctForwards.push_back(wstr);
m_vctBacks.pop_back();
m_pPath->SetText(_T(""));
m_pBackbtn->SetEnabled(false);
m_pFileList->RemoveAll();
return;
}
else
{
wstring temp = m_vctBacks.back();
m_vctForwards.push_back(temp);//只要执行这行代码,前进按钮就可用
if (!m_vctForwards.empty())
{
m_pForwardbtn->SetEnabled(true);
}
m_vctBacks.pop_back();
temp = m_vctBacks.back(); CListLabelElementUI* pElement = (CListLabelElementUI*)(m_pLeftTree->FindSubControl(temp.c_str())); if (pElement != NULL)
{
pElement->Select();
}
m_pFileList->RemoveAll();
InitFileList(temp.c_str());
m_pPath->SetText(temp.c_str());
}
}
}
Duilib实现 Windows资源管理器前进后退原理的更多相关文章
- 怎样在Windows资源管理器中添加右键菜单以及修改右键菜单顺序
有时,我们需要在Windows资源管理器的右键菜单中添加一些项,以方便使用某些功能或程序. 比如我的电脑上有一个免安装版的Notepad++,我想在所有文件的右键菜单中添加一项用Notepad++打开 ...
- SVN has atopping svn已停止工作 or windows资源管理器无限重启
准备在空间时间用用linux,就在自己的win7系统上安装了属性系统,用easyBCD安装的,谁知安装好之后win7系统下的svn客户端不能使用了,点击报错“SVN已停止工作”,随后怀疑是linux引 ...
- 使用windows资源管理器的排序规则
对于windows资源管理器 abc_1_def是要排到abc_10_def前面的 而一般的排序规则, 都会吧_10_排到前面 所以为了使用习惯, 最好用资源管理器的排序规则, windows有个AP ...
- SharePoint 2010 "客户端不支持使用windows资源管理器打开此列表" 解决方法
SharePoint 2010 在“库”--“库工具”,有一个“使用资源管理器打开”的按钮,点上去报“客户端不支持使用windows资源管理器打开此列表”.如图: 解决方案:在“开始”--“管理工具” ...
- sqlserver和Windows资源管理器争用内存
sqlserver和Windows资源管理器在设置成相同的优先级的情况下(普通),Windows资源管理器优先于sqlserver对内存的征用.开始是
- 为Windows资源管理器右键菜单添加菜单项
为Windows资源管理器右键菜单添加菜单项 在Windows下命令行用的比较多,经常在资源管理器里翻到某个目录,若想要在此目录下跑命令,只能是打开cmd.exe,然后一路cd才能到达此目录. 每次都 ...
- windows资源管理器(只能看,不能用)
实现Windows资源管理器 问题描述 Windows资源管理器是用来管理计算机资源的窗口,电脑里所有的文件都可以在资源管理器里找到,可以在资源管理器里查看文件夹的分层结构,可以利用资源管理器快速进行 ...
- 出现“Windows资源管理器已停止工作”错误
出现"Windows资源管理器已停止工作"错误 什么是资源管理器呢,explorer.exe进程的作用就是让我们管理计算机中的资源! 今天开电脑的时候就一直提示windows资源管 ...
- Windows资源管理器文件名排序
Windows资源管理器文件名排序 Windows资源管理器文件名排序 背景:自然排序 什么是自然排序? 怎样按自然排序的规则进行排序? 基于Python的解决方案 参考材料 这学期担任了本科生教学助 ...
随机推荐
- JSP 中 forward 和 redirect 的区别_2014.12.31
重定向,只能访问工程下(WebRoot文件夹)的页面,不能访问到内部(WEB_INF文件夹)的页面 1.从地址栏显示来说:forward浏览器显示路径不变,redirect浏览器显示路径改变forwa ...
- 06---Net基础加强
字符串特性-池-不可变性 class Program { static void Main(string[] args) { #region 判断两个对象是否是同一个对象 //Person p1 = ...
- 夺命雷公狗---DEDECMS----8dedecms干掉首页和-文档页-栏目页的页面的广告
我们首先来将首页生成静态页面,如下图所示: 成功后,如下显示: 如果成功后则在文件夹下多了一个index.html的文件.. 我们的首页静态页面是通过模版文件生成,所以我们只需要把模版文件的广告标签删 ...
- PAT乙级 1022. D进制的A+B (20)
1022. D进制的A+B (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 输入两个非负10进制整数A和 ...
- SQL SERVER2000中订阅与发布的具体操作
同步过程 一.准备工作,如果完成则可跳过. 1.内网DB服务器作为发布服务器,外网DB服务器作为订阅服务器. 发布服务器和订阅服务器上分别创建Windows用户jl,密码jl,隶属于administr ...
- Xutils请求服务器json数据与下载文件
String code_url = "https://ic.snssdk.com/user/mobile/send_code/v2/"; HttpUtils httpUtils = ...
- android 项目学习随笔六(网络缓存)
1. 对SharePreference的封装 import android.content.Context; import android.content.SharedPreferences; /** ...
- 在路由器 RT-AC68U 使用自定义 DDNS 用 3322.org 动态域名的方法
0.使用华硕的第三方固件 -- 梅林固件 , 具体更新固件方法不在本主题述说 1.打开 jffs, 以便启动时可以自动执行脚本 2.在 /jffs/scripts 下新建 ddns-start 文件. ...
- Linux USB摄像头驱动【转】
本文转载自:http://www.itdadao.com/articles/c15a509940p0.html 在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 ...
- linux之V4L2摄像头应用流程【转】
本文转载自:http://blog.csdn.net/tommy_wxie/article/details/11486907 对于v4l2,上次是在调试收音机驱动的时候用过,其他也就只是用i2c配置一 ...