大侠,请过来看看!
下面的代码是显示从磁盘打开一个BMP图,并返回一个HBITMAP句柄,有谁能给我结实一下?
HBITMAP BufferToBitmap(LPTSTR fn)
{
LPSTR p;
DWORD size;
CFile pf;
pf.Open(path,CFile::modeRead);
size=pf.GetLength();
p=new char[size];
pf.ReadHuge(p,size);//???????????????????????
pf.Close();
HBITMAP hBmp;
LPSTR hDIB,lpBuffer=p;
LPVOID lpDIBBits;
BITMAPFILEHEADER bmfHeader;
DWORD bmfHeaderLen;
bmfHeaderLen=sizeof(bmfHeader);
strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);
if(bmfHeader.bfType!=((WORD)('M'<<8)¦'B'))return NULL;//????????????????
hDIB=lpBuffer+bmfHeaderLen;
BITMAPINFOHEADER &bmiHeader=*(LPBITMAPINFOHEADER)hDIB;
BITMAPINFO &bmInfo=*(LPBITMAPINFO)hDIB;
int nColors=bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1<<bmiHeader.biBitCount;//????????????????
if(bmInfo.bmiHeader.biBitCount>8)//??????????????
lpDIBBits=(LPVOID)((LPDWORD)(bmInfo.bmiColors+bmInfo.bmiHeader.biClrUsed)+
((bmInfo.bmiHeader.biCompression==BI_BITFIELDS) ? 3 : 0));//???????????????
else
lpDIBBits=(LPVOID)(bmInfo.bmiColors+nColors);//?????????????
CClientDC dc(this);
hBmp=CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);
delete[] p;
return hBmp;
}
打问号的地方表示什么含义?