一、用两个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资源管理器前进后退原理的更多相关文章

  1. 怎样在Windows资源管理器中添加右键菜单以及修改右键菜单顺序

    有时,我们需要在Windows资源管理器的右键菜单中添加一些项,以方便使用某些功能或程序. 比如我的电脑上有一个免安装版的Notepad++,我想在所有文件的右键菜单中添加一项用Notepad++打开 ...

  2. SVN has atopping svn已停止工作 or windows资源管理器无限重启

    准备在空间时间用用linux,就在自己的win7系统上安装了属性系统,用easyBCD安装的,谁知安装好之后win7系统下的svn客户端不能使用了,点击报错“SVN已停止工作”,随后怀疑是linux引 ...

  3. 使用windows资源管理器的排序规则

    对于windows资源管理器 abc_1_def是要排到abc_10_def前面的 而一般的排序规则, 都会吧_10_排到前面 所以为了使用习惯, 最好用资源管理器的排序规则, windows有个AP ...

  4. SharePoint 2010 "客户端不支持使用windows资源管理器打开此列表" 解决方法

    SharePoint 2010 在“库”--“库工具”,有一个“使用资源管理器打开”的按钮,点上去报“客户端不支持使用windows资源管理器打开此列表”.如图: 解决方案:在“开始”--“管理工具” ...

  5. sqlserver和Windows资源管理器争用内存

    sqlserver和Windows资源管理器在设置成相同的优先级的情况下(普通),Windows资源管理器优先于sqlserver对内存的征用.开始是

  6. 为Windows资源管理器右键菜单添加菜单项

    为Windows资源管理器右键菜单添加菜单项 在Windows下命令行用的比较多,经常在资源管理器里翻到某个目录,若想要在此目录下跑命令,只能是打开cmd.exe,然后一路cd才能到达此目录. 每次都 ...

  7. windows资源管理器(只能看,不能用)

    实现Windows资源管理器 问题描述 Windows资源管理器是用来管理计算机资源的窗口,电脑里所有的文件都可以在资源管理器里找到,可以在资源管理器里查看文件夹的分层结构,可以利用资源管理器快速进行 ...

  8. 出现“Windows资源管理器已停止工作”错误

    出现"Windows资源管理器已停止工作"错误 什么是资源管理器呢,explorer.exe进程的作用就是让我们管理计算机中的资源! 今天开电脑的时候就一直提示windows资源管 ...

  9. Windows资源管理器文件名排序

    Windows资源管理器文件名排序 Windows资源管理器文件名排序 背景:自然排序 什么是自然排序? 怎样按自然排序的规则进行排序? 基于Python的解决方案 参考材料 这学期担任了本科生教学助 ...

随机推荐

  1. 侧菜单栏的实现SlidingPaneLayout

    SlidingPaneLayout分为两部分,上面的 左划出部分和没划出的时候 <?xml version="1.0" encoding="utf-8"? ...

  2. 形状特征提取-Hu不变矩(转载)

    [原文部分转载]:http://blog.csdn.net/wrj19860202/archive/2011/04/16/6327094.aspx 在连续情况下,图像函数为 ,那么图像的p+q阶几何矩 ...

  3. PHPCMS V9 环境搭建

    PHPCMS V9的学习总结分为以下几点: [1]PHPCMS 简介 PHP原始为Personal Home Page的缩写,(外文名:PHP: Hypertext Preprocessor,中文名: ...

  4. 某硕笔试题mysql数据库部分(较为全面)

    Student(S#,Sname,Sage,Ssex) 学生表  Course(C#,Cname,T#) 课程表  SC(S#,C#,score) 成绩表  Teacher(T#,Tname) 教师表 ...

  5. resultMap / resultType

    ===================resultMap:实体类的属性和通过resultMap映射后的property属性一致 <resultMap id="workerSelect& ...

  6. 【python cookbook】【数据结构与算法】12.找出序列中出现次数最多的元素

    问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是为此类问题所设计的.它的一个非常方便的most_common()方法直接告诉你答案. # ...

  7. PayPal网站付款标准版(for PHP)

    简单整理一下PHP项目整合PayPal支付功能. 一.表单的构建: <form method="post" name="form" action=&quo ...

  8. 指令重排序及Happens-before法则随笔

    指令重排序 对主存的一次访问一般花费硬件的数百次时钟周期.处理器通过缓存(caching)能够从数量级上降低内存延迟的成本这些缓存为了性能重新排列待定内存操作的顺序.也就是说,程序的读写操作不一定会按 ...

  9. MySQL存储引擎之InnoDB

    一.The InnoDB Engine Each InnoDB table is represented on disk by an .frm format file in the database ...

  10. Android内存溢出解决方案(OOM)

    众所周知,每个Android应用程序在运行时都有一定的内存限制,限制大小一般为16MB或24MB(视平台而定).因此在开发应用时需要特别关注自身的内存使用量,而一般最耗内存量的资源,一般是图片.音频文 ...