用clistctrl 的 CImageList 替换图标的时候有点有关问题,请帮忙看看吧
用clistctrl 的 CImageList 替换图标的时候有点问题,请帮忙看看吧
CAutoVectorPtr<char> pBuffer;
pBuffer.Allocate(fileSize+1);
//读取png文件到char* buffer
srcFile.ReadFile(pBuffer,fileSize+1);
//因为是测试,我读取临时文件,假设替换index 为2 的,图标
m_listFileShareView.ExtractThumbnail(pBuffer,fileSize+1,2);
void CListUseCsHeader::ExtractThumbnail(char* buffer,int bufsize,int iIndex)
{
HBITMAP hBmp = NULL;
CBitmap* pImage = NULL;
::CoInitialize(NULL); //初始化COM
HRESULT hr;
HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE,bufsize); //给图片分配全局内存
LPVOID lpBuf = ::GlobalLock(hMem); //锁定内存
memcpy(lpBuf,buffer,bufsize);
::GlobalUnlock(hMem); //解锁内存
IStream *pStream = NULL; //创建一个IStream接口指针,用来保存图片流
hr = ::CreateStreamOnHGlobal(hMem,TRUE,&pStream); //用全局内存初始化IStream接口指针
Gdiplus::Bitmap* pBitmap = Gdiplus::Bitmap::FromStream(pStream);
// attach the thumbnail bitmap handle to an CBitmap object
pBitmap->GetHBITMAP(NULL, &hBmp);
pImage = new CBitmap();
pImage->Attach(hBmp);
// add bitmap to our image list
m_imageListLargeIcon.Replace(iIndex, pImage, NULL);
::CoUninitialize();
//m_imageListLargeIcon.SetImageCount (m_imageListLargeIcon.GetImageCount());
}
------解决方案--------------------
别人用的是icon你用的bmp 可能是问题所在
CAutoVectorPtr<char> pBuffer;
pBuffer.Allocate(fileSize+1);
//读取png文件到char* buffer
srcFile.ReadFile(pBuffer,fileSize+1);
//因为是测试,我读取临时文件,假设替换index 为2 的,图标
m_listFileShareView.ExtractThumbnail(pBuffer,fileSize+1,2);
void CListUseCsHeader::ExtractThumbnail(char* buffer,int bufsize,int iIndex)
{
HBITMAP hBmp = NULL;
CBitmap* pImage = NULL;
::CoInitialize(NULL); //初始化COM
HRESULT hr;
HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE,bufsize); //给图片分配全局内存
LPVOID lpBuf = ::GlobalLock(hMem); //锁定内存
memcpy(lpBuf,buffer,bufsize);
::GlobalUnlock(hMem); //解锁内存
IStream *pStream = NULL; //创建一个IStream接口指针,用来保存图片流
hr = ::CreateStreamOnHGlobal(hMem,TRUE,&pStream); //用全局内存初始化IStream接口指针
Gdiplus::Bitmap* pBitmap = Gdiplus::Bitmap::FromStream(pStream);
// attach the thumbnail bitmap handle to an CBitmap object
pBitmap->GetHBITMAP(NULL, &hBmp);
pImage = new CBitmap();
pImage->Attach(hBmp);
// add bitmap to our image list
m_imageListLargeIcon.Replace(iIndex, pImage, NULL);
::CoUninitialize();
//m_imageListLargeIcon.SetImageCount (m_imageListLargeIcon.GetImageCount());
}
------解决方案--------------------
别人用的是icon你用的bmp 可能是问题所在