HBITMAP CVidUserInfo::BufferToBITMAP(LPSTR path)
{
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;
}

解决方案 »

  1.   

    CBitmapButton button; CBitmap *pbitmap = (CBitmap *)(DWORD(&button) + sizeof(CButton));           // normal image (REQUIRED)
    CBitmap *pbitmapSel = (CBitmap *)(DWORD(&button) + sizeof(CButton) * 2);        // selected image (OPTIONAL)
    CBitmap *pbitmapFocus = (CBitmap *)(DWORD(&button) + sizeof(CButton) * 3);      // focused but not selected (OPTIONAL)
    CBitmap *pbitmapDisabled = (CBitmap *)(DWORD(&button) + sizeof(CButton) * 4);   // disabled bitmap (OPTIONAL)接下来
    pbitmap->LoadBitmap("c:\\....");
    ...
      

  2.   

    CBitmap *pbitmap = (CBitmap *)(DWORD(&button));           // normal image (REQUIRED)
    CBitmap *pbitmapSel = (CBitmap *)(DWORD(&button) + sizeof(CButton));        // selected image (OPTIONAL)
    CBitmap *pbitmapFocus = (CBitmap *)(DWORD(&button) + sizeof(CButton) * 2);      // focused but not selected (OPTIONAL)
    CBitmap *pbitmapDisabled = (CBitmap *)(DWORD(&button) + sizeof(CButton) * 3);   // disabled bitmap (OPTIONAL) pbitmap->LoadBitmap("c:\\");
      

  3.   

    唉,搞了几遍!
    CBitmapButton button; CBitmap *pbitmap = (CBitmap *)(DWORD(&button));
    CBitmap *pbitmapSel = (CBitmap *)(DWORD(&button) + sizeof(CBitmap));
    CBitmap *pbitmapFocus = (CBitmap *)(DWORD(&button) + sizeof(CBitmap) * 2);
    CBitmap *pbitmapDisabled = (CBitmap *)(DWORD(&button) + sizeof(CBitmap) * 3);
    我觉得还是派生一个安全;