如何显示多幅BMP图,并实现前后切换
要做写一个程序要实现多幅BMP图像的读取,并实现前后图像的切换,不知道从何下手,请高手指点
回复 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);
}
}
这样表述有问题吗?
编译没有错误,选择多幅图像能显示出最后一幅图像,但是前一幅图按键没有响应,是怎么回事呢?
谢谢指点