一、用两个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. 一个标准的ECharts代码

    <!DOCTYPE html> <head> <meta charset="utf-8"> <title>ECharts</t ...

  2. paper 66: MATLAB函数—disp的使用

    例子来源于网络:关键是看disp函数怎么把字符和数字在一起进行显示. 两点生成直线程序 %%以下是一个通过给定两点显示直线方程的程序, %%该程序需要给出两个点的坐标,结果返回为y=kx+b的格式,且 ...

  3. oracle索引使用时注意

    1.使用不等于操作符(<>, !=)下面这种情况,即使在列dept_id有一个索引,查询语句仍然执行一次全表扫描 select * from dept where staff_num &l ...

  4. getResource().getPath()返回的路径空格变成了 %20

    this.getClass().getResource(“/”).getPath()使用者方法查看文件在服务器上的地址,但是地址中的空格会被转化为%20. 解决办法1: URI uri = new U ...

  5. NOIP200407合唱队形+最长上升子序列O(n^2)详解

    合唱队形解题报告 2016-05-12   4:30——6:45 NOIP200407合唱队形 难度级别:A: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:20000 ...

  6. Office 2007在安装过程中出错-解决办法

    1, 可能是因为c:\program files\common files\microsoft Shared\web server Extensions\40\bin目录下缺少Fp4autl.dll, ...

  7. HTML5 webapp框架

    1.Sencha Touch 注:jQTouch主要用于手机上的web Kit浏览器上实现一些包括动画.列表导航.默认应用样式等各种常见UI效果的 JavaScript 库.支持包括 iPhone.A ...

  8. nodejs和mongodb实践

    首先,当然是都安装了nodejs 和mongodb了.这必须是前提条件. 现在我们要用nodejs连接mongodb数据库了.我这里只是一个非常非常简单是实践,初学嘛.更深入的学习之后,我会仔细写笔记 ...

  9. selenium webdriver三种等待方法

    webdriver三种等待方法 1.使用WebDriverWait from selenium import webdriverfrom selenium.webdriver.common.by im ...

  10. 【Pro ASP.NET MVC 3 Framework】.学习笔记.5.SportsStore一个真实的程序

    我们要建造的程序不是一个浅显的例子.我们要创建一个坚固的,现实的程序,坚持使它成为最佳实践.与Web Form中拖控件不同.一开始投入MVC程序付出利息,它给我们可维护的,可扩展的,有单元测试卓越支持 ...