使用下载的CDib类、怎么从资源里加载位图文件?是CDib::LoadFile(CFile&); @_@
xinlf 2009-03-21 05:59:23 从网上下载了一个CDib的类,使用不好,不知道该怎样将资源里的IDB_BITMAP1加载到里面、请jiangsheng专家能给个代码好吗?下面是CDib类里面的LoadFile函数,
可是不知道该怎么在外部调用、@_@
/*************************************************************************
* 函数名称:LoadFile(CFile& file)
* 函数参数:
* CFile& file,要读取得文件文件CFile
* 函数类型:HGLOBAL
* 函数功能:将指定的文件中的DIB对象读到指定的内存区域中
*************************************************************************/
HGLOBAL CDib::LoadFile(CFile& file)
{
DWORD dwFileSize;
dwFileSize= file.GetLength();//获取文件大小
if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader))// 读取DIB文件头
{
return NULL;// 大小不一致,返回NULL
}
// 如果文件类型不是"BM",其16进制值为0x4d42,则返回并进行相应错误处理
if (bmfHeader.bfType !=0x4d42)
{
return NULL;// 如果不是则返回NULL
}
m_hDib= (HGLOBAL) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwFileSize-sizeof(BITMAPFILEHEADER));// 分配DIB内存
if (m_hDib==NULL)
{
return NULL;// 分配失败,返回NULL
}
/////////////////////////////////////////////////////////////////////////
//给CDib类的成员变量赋值
lpdib = (LPSTR) ::GlobalLock((HGLOBAL) m_hDib);// 锁定
if (file.Read(lpdib, dwFileSize - sizeof(BITMAPFILEHEADER)) !=// 读像素
dwFileSize - sizeof(BITMAPFILEHEADER) )//大小不一致
{
::GlobalUnlock((HGLOBAL) m_hDib); // 解除锁定
::GlobalFree((HGLOBAL) m_hDib); // 释放内存
return NULL;
}
::GlobalUnlock((HGLOBAL) m_hDib);// 解除锁定
return m_hDib;// 返回DIB句柄
}