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的解决方案 参考材料 这学期担任了本科生教学助 ...
随机推荐
- CCF真题之最优灌溉
201412-4 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉. 为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也可以利 ...
- paper 79:MATLAB函数,interp1
在matlab中有一个interp1()函数,可以帮助解决问题,具体情况如下:MATLAB中的插值函数为interp1,其调用格式为: yi= interp1(x,y,xi,'method') 其中x ...
- Python快速建站系列-Part.One-组装开发环境
|版权声明:本文为博主原创文章,未经博主允许不得转载. 源代码都在github上:SmallStudyStation 现在是个demo,但回来会租个服务器,等功能完善了放到服务器上挂着,域名jusot ...
- json转化为java实体
import net.sf.json.JSONObject; Map<String, Object> classMap = new HashMap<String, Object> ...
- 台电幻彩u盘拆解
- Vmware 10安装MAC OS X 10.9备忘
下载准备 Vmware 10 unlock-all-v120.zip (用以支持新建MAC) MAC OS X 10.9 VMWARE.rar 已经安装完成的MAC系统虚拟机镜 ...
- Openstack的nova-network的vlan模式扩展2
接上一篇,上一篇我们使用的是nova-manage命令来创建的网络,这里就有一些知识需要了解 遇到的问题 控制节点的前面的BUG已经按官方解决BUG方式解决了,但是在开发dashboard,使用nov ...
- 利用 iptables 命令限制单个端口的并发连接数
iptables -I INPUT -p tcp --dport 11251:11300 -m connlimit --connlimit-above 10 -j REJECT 以上代码意思: 在IN ...
- eclispse快捷键
Eclipse常用快捷键 1几个最重要的快捷键 代码助手:Ctrl+Space(简体中文操作系统是Alt+/)快速修正:Ctrl+1单词补全:Alt+/打开外部Java文档:Shift+F2 显示 ...
- [转]centos中wget的使用方法
本文转自 http://www.cnblogs.com/chusiping/archive/2011/11/10/2243805.html 和 http://www.jb51.net/os/RedHa ...