在MFC中制作突破游戏。我将位图信息存储到CDC
对象(设备上下文对象)中,但是由于每个块都有不同的位图,因此我将相同的覆盖的CDC m_blockDC
存储到std::vector<CDC> m_blockStates
中,并且由于我有五种块类型,我将前面提到的向量存储到std::vector<std::vector<CDC>>
中,因此我可以使用枚举BLOCKPROPS
及其通过索引显示的hit属性访问每个块状态位图信息;因此,我将使用m_blockStates[BLOCKTYPE][CBlock.GetHits()]
当我尝试运行程序时,出现错误'CDC::CDC(const CDC &)': attempting to reference a deleted function
。
这是将m_blockDC
存储到二维向量中的方式:
void CCreateWindow::LoadBlock(std::vector<LPCWSTR> FileMap, BLOCKPROP BlockProperty)
{
for (int i = 0; i < FileMap.size(); i++)
{
HANDLE blockBitmap = LoadImage(0, FileMap[i], IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); //(Instance, FileSrc, Type, PartX, PartY, Process)
m_blockCBMP.Attach(reinterpret_cast<HBITMAP>(blockBitmap));
pDC = this->GetDC();
m_blockDC.CreateCompatibleDC(pDC);
switch (BlockProperty)
{
case TUFF:
m_blockStateArray[TUFF].push_back(m_blockDC);
break;
case STRD:
m_blockStateArray[STRD].push_back(m_blockDC);
break;
case WEAK:
m_blockStateArray[WEAK].push_back(m_blockDC);
break;
case SPCL:
m_blockStateArray[SPCL].push_back(m_blockDC);
break;
case INDS:
m_blockStateArray[INDS].push_back(m_blockDC);
break;
default:
break;
}
}
//Get BitmapSize
m_blockDC.SelectObject(&m_blockCBMP);
m_blockCBMP.GetBitmap(&m_blockBMP);
}
此代码用于OnInitDialog()
的{{1}}中,并且CCreateWindow.cpp
中的函数PaintBlock()
将用于绘制块,或者至少是这样假设的成为。