全局变量:
CDC MemDC[30];
CBitmap bm[30];BOOL CTestcaptureDlg::SaveBufToFile(LPCTSTR filename, CBitmap bm, CDC dc)
{
BITMAP btm;
bm.GetBitmap(&btm);
DWORD size=btm.bmWidthBytes*btm.bmHeight;
LPSTR lpData=(LPSTR)GlobalAlloc(GPTR,size);
/////////////////////////////////////////////
BITMAPINFOHEADER bih;
bih.biBitCount=btm.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=btm.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=btm.bmWidth;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
static int filecount=0;
CString name;
name.Format("pict%04d.bmp",filecount++);
BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=54+size;
bfh.bfOffBits=54;
CFile bf;
if(bf.Open(name,CFile::modeCreate|CFile::modeWrite))
{
bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));
bf.WriteHuge(lpData,size);
bf.Close();
}
GlobalFree(lpData); return TRUE;
}void CTestcaptureDlg::OnButton2()
{
CDC dc;
CString strtmp;
for (int i = 0; i < 30; i++)
{
strtmp.Format("tmp_%d.bmp", i);
SaveBufToFile(strtmp, bm[i], dc);
}
}问题:编译时报错:error C2664: 'SaveBufToFile' : cannot convert parameter 2 from 'class CBitmap' to 'class CBitmap'
为什么?
CDC MemDC[30];
CBitmap bm[30];BOOL CTestcaptureDlg::SaveBufToFile(LPCTSTR filename, CBitmap bm, CDC dc)
{
BITMAP btm;
bm.GetBitmap(&btm);
DWORD size=btm.bmWidthBytes*btm.bmHeight;
LPSTR lpData=(LPSTR)GlobalAlloc(GPTR,size);
/////////////////////////////////////////////
BITMAPINFOHEADER bih;
bih.biBitCount=btm.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=btm.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=btm.bmWidth;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);
static int filecount=0;
CString name;
name.Format("pict%04d.bmp",filecount++);
BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=54+size;
bfh.bfOffBits=54;
CFile bf;
if(bf.Open(name,CFile::modeCreate|CFile::modeWrite))
{
bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));
bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));
bf.WriteHuge(lpData,size);
bf.Close();
}
GlobalFree(lpData); return TRUE;
}void CTestcaptureDlg::OnButton2()
{
CDC dc;
CString strtmp;
for (int i = 0; i < 30; i++)
{
strtmp.Format("tmp_%d.bmp", i);
SaveBufToFile(strtmp, bm[i], dc);
}
}问题:编译时报错:error C2664: 'SaveBufToFile' : cannot convert parameter 2 from 'class CBitmap' to 'class CBitmap'
为什么?
{
CDC dc;
CString strtmp;
for (int i = 0; i < 30; i++)
{
strtmp.Format("tmp_%d.bmp", i);出错行————》 SaveBufToFile(strtmp, bm[i], dc);
}
}
BOOL CTestcaptureDlg::SaveBufToFile(LPCTSTR filename, CBitmap& bm, CDC& dc)
构造函数,而MFC中没有提供这两个函数,所以无法通过编译的。
写成这样就可以了,
BOOL SaveBufToFile(LPCSTR,CBitmap*,CDC*);
然后在调用SaveBufToFile(strtmp, &bm[i], &dc);另外提醒你一下,你对编译错误提示看
的不是很仔细,其实C2440写的很详细了。(no copy construtor avaliable)