mfc单文档将一组图片存放到一个数组中,在draw(Graphics& gh)函数内一个一个绘制出来
时间: 2024-02-28 22:55:42 浏览: 105
好的,下面是一种实现方法:
1. 在你的文档类中添加一个数组成员变量来存储图片。假设你想要存储位图,那么数组可以定义为:
```c++
CArray<CBitmap, CBitmap&> m_arrBitmaps;
```
2. 在你的文档类中添加一个函数来加载位图并将其添加到数组中。假设你的位图文件名存储在一个数组中(m_arrFilenames),那么函数可以定义为:
```c++
void CMyDoc::LoadBitmaps()
{
for (int i = 0; i < m_arrFilenames.GetSize(); i++)
{
CBitmap bmp;
bmp.LoadBitmap(m_arrFilenames[i]);
m_arrBitmaps.Add(bmp);
}
}
```
3. 在你的视图类中添加一个函数来绘制位图。假设你想要绘制所有的位图(m_arrBitmaps),那么函数可以定义为:
```c++
void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
for (int i = 0; i < pDoc->m_arrBitmaps.GetSize(); i++)
{
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(pDoc->m_arrBitmaps[i]);
BITMAP bmpInfo;
pDoc->m_arrBitmaps[i].GetBitmap(&bmpInfo);
pDC->BitBlt(i * bmpInfo.bmWidth, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &memDC, 0, 0, SRCCOPY);
}
}
```
这个函数使用了双缓冲技术来绘制位图,以避免闪烁。它首先创建一个兼容的内存DC并将其选择为位图,然后使用BitBlt函数将位图绘制到视图的DC中。每个位图的位置是由其索引和位图宽度计算得出的。
希望这个实现方法能够帮助到你。
阅读全文