| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2906 人关注过本帖
标题:如何显示多幅BMP图,并实现前后切换
取消只看楼主 加入收藏
daisylin
Rank: 2
等 级:论坛游民
帖 子:33
专家分:26
注 册:2009-8-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
如何显示多幅BMP图,并实现前后切换
要做写一个程序要实现多幅BMP图像的读取,并实现前后图像的切换,不知道从何下手,请高手指点
搜索更多相关主题的帖子: BMP 
2010-04-12 21:39
daisylin
Rank: 2
等 级:论坛游民
帖 子:33
专家分:26
注 册:2009-8-14
收藏
得分:0 
回复 2楼 debroa723
类型定义:
typedef vector<CDib*> DibArrays;
typedef vector<CDib*>::iterator Iterator;
在文档类中定义多文件的读取函数以及返回成员变量的函数:
成员变量:
    Iterator m_iter;
    DibArrays m_DibArrays;
void CLesson3Doc::OnFileOpen()
{
    // TODO: Add your command handler code here
    CFileDialog MyDlg(TRUE,"*.bmp",NULL,OFN_ALLOWMULTISELECT | OFN_ENABLESIZING,NULL,NULL);
    if (MyDlg.DoModal() == IDOK)
    {
        POSITION pos = MyDlg.GetStartPosition();  //获得列表中第一个文件名的位置
        while (pos!=0)
        {
            CString FileName= MyDlg.GetNextPathName(pos); //获得选中的下一个文件名
            CDib* pDib = new CDib;
            pDib->LoadFile(FileName);
            m_DibArrays.push_back(pDib);
            m_iter = m_DibArrays.end()-1;
        }
        m_index = (int)m_DibArrays.size();
        UpdateAllViews(NULL);

    }
}

Iterator CLesson3Doc::GetIterator()
{
    return m_iter;
}

DibArrays CLesson3Doc::GetDibArrays()
{
    return m_DibArrays;
}

在视图类的Draw函数定义如下:
void CLesson3View::OnDraw(CDC* pDC)
{
    CLesson3Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here


    Iterator iter = pDoc->GetIterator();
    if (iter!=NULL)
    {
        (*iter)->Draw(pDC);
        // Invalidate();
    }
}
前一幅图按键和后一幅图按键的命令响应函数定义为:
void CLesson3View::OnPrev()
{
    // TODO: Add your command handler code here
    CLesson3Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
   
    Iterator iter = pDoc->GetIterator();
    DibArrays vDibArrays = pDoc->GetDibArrays();
    if (iter!=NULL)
    {
        iter--;
        if (iter<vDibArrays.begin())
        {
            iter++;
        }
        Invalidate();
    }
}

void CLesson3View::OnNext()
{
    // TODO: Add your command handler code here
    CLesson3Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    Iterator iter = pDoc->GetIterator();
    DibArrays vDibArrays = pDoc->GetDibArrays();
    if (iter!=NULL)
    {
        iter++;
        if (iter==vDibArrays.end())
        {
            iter--;
        }
        pDoc->UpdateAllViews(NULL);
    }
   
}

这样表述有问题吗?
编译没有错误,选择多幅图像能显示出最后一幅图像,但是前一幅图按键没有响应,是怎么回事呢?
谢谢指点
2010-04-14 09:55
daisylin
Rank: 2
等 级:论坛游民
帖 子:33
专家分:26
注 册:2009-8-14
收藏
得分:0 
回复 4楼 debroa723
Lesson3.rar (41.78 KB)

附件中是我写的代码,能不能帮我看一下到底是哪里出错了?
2010-04-14 20:57
快速回复:如何显示多幅BMP图,并实现前后切换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017981 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved