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;
}
{
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;
}
解决方案 »
- vector遍历问题
- 如何在屏幕上查看大小写键的状态?
- 从文件中读取结构引起指针错误有没有办法解决?
- 如何将CScrollBar的按钮替换成图片
- 问一下,socket通信怎么发送struct类型的数据,以及怎么接受啊?
- 使用水晶报表Crystal Reports 10的VC程序在客户端怎样分发安装?
- 一个有关error LNK2001的问题!
- UVN相机变换时发现的问题
- 为什么我在 ActiveX 控件中定义的事件在JScript or VBScript中不能捕获
- 在Property Sheet 中,如何改变菜单的背景色????(GetTabControl()->SetBKColor()搞不定)
- 用向导生成console程序,可不可以用windows的消息机制,多线程等?
- 请问如何让对话框上的关闭按钮(叉号框)灰掉?
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:\\....");
...
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:\\");
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);
我觉得还是派生一个安全;