• 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到前几集合里,然后把后退按钮设为不可用

      1 void OnClickBtnForward()
      2 {
      3     if (m_vctForwards.size() > 0)
      4     {
      5         if (m_vctForwards.size() == 1)
      6         {
      7             wstring wstr = m_vctForwards.back();
      8             CListLabelElementUI* pElement = (CListLabelElementUI*)(m_pLeftTree->FindSubControl(wstr.c_str()));
      9 
     10             if (pElement)
     11             {
     12                 pElement->Select();
     13             }
     14             
     15             m_vctBacks.push_back(wstr);
     16             m_vctForwards.pop_back();
     17 
     18             if (m_vctForwards.empty())//在此判断有点多余
     19             {
     20                 m_pForwardbtn->SetEnabled(false);
     21             }
     22 
     23             if (!m_vctBacks.empty())
     24             {
     25                 m_pBackbtn->SetEnabled(true);
     26             }
     27             
     28             m_pPath->SetText(wstr.c_str());
     29             m_pFileList->RemoveAll();
     30             InitFileList(wstr.c_str());
     31             return;
     32         }
     33         else
     34         {
     35             wstring  temp = m_vctForwards.back();
     36             m_vctBacks.push_back(temp);
     37             m_vctForwards.pop_back();
     38             temp = m_vctBacks.back();
     39 
     40             CListLabelElementUI* pElement = (CListLabelElementUI*)(m_pLeftTree->FindSubControl(temp.c_str()));
     41             if (pElement != NULL)
     42             {
     43                 pElement->Select();
     44             }
     45 
     46             if (!m_vctBacks.empty())
     47             {
     48                 m_pBackbtn->SetEnabled(true);
     49             }
     50 
     51             m_pFileList->RemoveAll();
     52             InitFileList(temp.c_str());
     53             m_pPath->SetText(temp.c_str());
     54         }
     55     }
     56 }
     57 
     58 void OnClickBtnBack()
     59 {
     60     if (m_vctBacks.size() > 0)
     61     {
     62 
     63         if (m_vctBacks.size() == 1)
     64         {
     65             wstring wstr = m_vctBacks.back();
     66             CListLabelElementUI* pElement = (CListLabelElementUI*)(m_pLeftTree->FindSubControl(wstr.c_str()));
     67 
     68             if (pElement)
     69             {
     70                 pElement->Select();
     71             }
     72             m_vctForwards.push_back(wstr);
     73             m_vctBacks.pop_back();
     74             m_pPath->SetText(_T(""));
     75             m_pBackbtn->SetEnabled(false);
     76             m_pFileList->RemoveAll();
     77             return;
     78         }
     79         else
     80         {
     81             wstring temp = m_vctBacks.back();
     82             m_vctForwards.push_back(temp);//只要执行这行代码,前进按钮就可用
     83             if (!m_vctForwards.empty())
     84             {
     85                 m_pForwardbtn->SetEnabled(true);
     86             }
     87             m_vctBacks.pop_back();
     88             temp = m_vctBacks.back();
     89 
     90             CListLabelElementUI* pElement = (CListLabelElementUI*)(m_pLeftTree->FindSubControl(temp.c_str()));
     91 
     92             if (pElement != NULL)
     93             {
     94                 pElement->Select();
     95             }
     96             m_pFileList->RemoveAll();
     97             InitFileList(temp.c_str());
     98             m_pPath->SetText(temp.c_str());
     99         }    
    100     }
    101 }
  • 相关阅读:
    场曲——像差相关
    曲面探测器相关——查资料
    光学系统联合设计
    Python3:Django连接Mysql数据库时出错,'Did you install mysqlclient or MySQL-python?'
    Python3.x:pip install pymssql安装时出错
    Python3:自动发送账单邮件
    Python3:input()输入函数的用法
    Python3:读取配置dbconfig.ini(含有中文)显示乱码的解决方法
    python3:利用smtplib库和smtp.qq.com邮件服务器发送邮件
    CSS3:布局display属性的flex(弹性布局)
  • 原文地址:https://www.cnblogs.com/chechen/p/5341587.html
Copyright © 2020-2023  润新知