Chinaunix首页 | 论坛 | 博客
  • 博客访问: 134713
  • 博文数量: 20
  • 博客积分: 128
  • 博客等级: 入伍新兵
  • 技术积分: 310
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-10 18:16
文章分类

全部博文(20)

文章存档

2013年(15)

2012年(5)

分类: 嵌入式

2013-04-25 20:15:22

问题:
1.向前翻页和向后翻页的实现,并设置其的可用性
2.删除图片的实现

解决方案:
1.当前显示的若是第一张图片,则<--键不可用,若当前显示的是最后一张图片时-->不可用。
当打开文件选择了要显示的第一个图片时,在打开函数里需要直接对<-- 和 -->做设置
如下
list m_PathLst保存的是用findfirstfile 和 findnextfile查找到的所有图片文件的路径
list::iterator m_Pathtemp =m_PathLst.end();//迭代器指向链表尾
 advance(m_Pathtemp , -1 ); //将迭代器指向倒数第一张图片
 if (m_Pathfind == m_Pathtemp)//如果选择的那个图片是最后一张图片则-->按键不能使用
 {
  m_RightBtn.EnableWindow(FALSE);
 }
 if (m_Pathfind == m_PathLst.begin())//如果选择的那个图片是第一张图片则<--按键不能使用
 {
  m_LeftBtn.EnableWindow(FALSE);
 }

在<--的消息响应函数中设置
list::iterator m_Pathtemp =m_PathLst.begin();
 advance(m_Pathtemp , 1 ); //找到正数第二张图片
 //MessageBox(*m_Pathtemp);
    if (m_Pathfind == m_Pathtemp)
    {
             m_LeftBtn.EnableWindow(FALSE);
             m_RightBtn.EnableWindow(TRUE);
    }
 m_RightBtn.EnableWindow(TRUE);
 m_Pathfind--;
 Loadimage(*m_Pathfind);
此处的思路是,当前显示若是正数第二张图片,则在点击<--按键后,显示就是第一张图片了,就需要将<--设为不可用。
-->设置为可用
在-->的消息响应函数中设置

list::iterator m_Pathtemp =m_PathLst.end();
 advance(m_Pathtemp , -2 ); //找到倒数第二张图片
 if (m_Pathfind == m_Pathtemp)
 {
  m_LeftBtn.EnableWindow(TRUE);
  m_RightBtn.EnableWindow(FALSE);

 }
 m_LeftBtn.EnableWindow(TRUE);
 m_Pathfind++;
 Loadimage(*m_Pathfind);


此处的思路同上相反即可,当前显示若是倒数第二张图片,则在点击-->按键后,显示就是最一张图片了,就需要将-->设为不可用。<--设置为可用
2.删除的思路是:点击删除按钮后先弹出对话框,看看是否要删除选择的图片,否的话什么也不做,是的话,总共需要两步:
(1)删除图片所在文件夹中的当前图片。用DeleteFile(*m_Pathfind);即可,参数是要删除的图片的完全路径
(2)删除List链表中保存当前图片路径的节点。涉及的问题如下:
删除List对应的节点 并将指针向下移动一个,注意若是最后一张需要将指针调至倒数第二张的位置上
  并且要设置Button的可用性,若文件中只剩下一张图片,选择确定删除后,需要显示封面图片,并将<--和-->禁用

 

void CScan::OnBnClickedDelete()
{
 // TODO: 在此添加控件通知处理程序代码
 //MessageBox(*m_Pathfind);
 list::iterator Pathtemp =m_PathLst.begin();
 list::iterator Pathtemph =m_PathLst.end();
 advance(Pathtemp , 1 );
 list::iterator PathTemp = m_PathLst.begin();

 list::iterator PathBegin =m_PathLst.begin();

 CDelete delteDlg;
 delteDlg.DoModal();

 if (delteDlg.m_DelteCancel == TRUE)
 {
  UpdateWindow();
  Loadimage(*m_Pathfind);
  return;
 }
 if (delteDlg.m_DeleteOk == TRUE)
 { 
  DeleteFile(*m_Pathfind);
  //删除List对应的节点 并将指针向下移动一个,注意若是最后一张需要将指针调至第一张的位置上
  //并且要设置Button的可用性,若文件中只剩下一张图片,选择确定删除后,需要显示封面图片
  while (PathBegin != m_PathLst.end())
  {
   if (*PathBegin == *m_Pathfind)
   { 
    if (PathBegin==m_PathLst.begin())//删除的若是第一张图片,即头结点,则需将头结点向下移动一个
    {
     m_PathLst.begin()=Pathtemp;
    }
    m_Pathfind=m_PathLst.erase(PathBegin);
    break; 
   }
   else
   {
    ++PathBegin;
   }
  }
  if (m_PathLst.empty())//可以处理删除完后文件夹中一张图片也没有的情况,
  //picture控件就显示封面了
  {
   m_DeleteBtn.EnableWindow(FALSE);
   return ;
  }
  else
  {
    if(m_Pathfind==m_PathLst.end())//如果删除后m_Pathfind指向NULL则表示删的是最后一张,则-->禁用
    {
     m_RightBtn.EnableWindow(FALSE);
    }
                else
    {
     m_RightBtn.EnableWindow(TRUE);
    }
    if (m_Pathfind == m_PathLst.end())//如果删除后m_Pathfind指向NULL则表示删的是最后一张
    {
     
     Pathtemp = m_PathLst.begin();
     advance(Pathtemp,1);
     advance(Pathtemph , -1 );
     m_Pathfind = Pathtemph;      //显示倒数第二张图片
     if (Pathtemp==m_PathLst.end())//处理若删除后文件中只剩下一张图片的情况
     {
      m_RightBtn.EnableWindow(FALSE);
      m_LeftBtn.EnableWindow(FALSE);
     }
    }
    UpdateWindow();
    Loadimage(*m_Pathfind); 
   }
  }
 }
 
}          

阅读(2143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~