怎么在一个静态Picture控件中显示JPG文件? 问题描述: 在一个对话框中把一幅JPG图片显示到一个静态控件中,我尝试使用网上的CPicture类,可是没有成功,希望高手帮助解答.email: [email protected]多谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 能不能够使用Dialog的函数来实现? my example:HBITMAP CPicture::LoadImageFromID(UINT nIDRes){ try { HMODULE hInst=GetModuleHandle(NULL); LPCTSTR lpRes = MAKEINTRESOURCE(nIDRes); HRSRC hRsrc = ::FindResource(hInst, lpRes, "JPG"); if (NULL == hRsrc) return FALSE; HGLOBAL hGlobal = LoadResource(hInst, hRsrc); if (NULL == hGlobal) return FALSE; DWORD dwSize = SizeofResource(hInst, hRsrc); LPVOID lpData = LockResource(hGlobal); if (NULL == lpData) return FALSE; // alloc memory based on file size HGLOBAL hJPG = ::GlobalAlloc(GMEM_MOVEABLE, dwSize); LPVOID lpJGP = ::GlobalLock(hJPG); memcpy(lpJGP, lpData, dwSize); ::GlobalUnlock(hJPG); //LPVOID pvData = GlobalLock(hGlobal); //_ASSERTE(NULL != pvData); // read file and store in global memory LPSTREAM pstm = NULL; // create IStream* from global memory HRESULT hr = CreateStreamOnHGlobal(hJPG, TRUE, &pstm); _ASSERTE(SUCCEEDED(hr) && pstm); // Create IPicture from image file LPPICTURE gpPicture; hr = ::OleLoadPicture(pstm, dwSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture); _ASSERTE(SUCCEEDED(hr) && gpPicture); pstm->Release(); OLE_HANDLE m_picHandle; gpPicture->get_Handle(&m_picHandle); return (HBITMAP)m_picHandle; } catch (...) { } return NULL;}//call CPicture pic; HBITMAP hbmp=pic.LoadImageFromID(IDR_TODAY);//IDR_TODAY is jpg id (HBITMAP)::SendMessage(::GetDlgItem(this->m_hWnd,IDC_TODAY), STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp); kingzai都给你解答了,下面排队接分了 MM_LOMETRIC映射模式的疑问 vc如何向网站发送自定义cookie ACCESS数据库占空间大的头疼问题 为什么我在VC++ 6.0 里找不到“Source Browser”?请问它怎么能够打开? ado recordset open exception 问题 如何初始化CDTPicker控件的值? 这段代码为什么会出错呢?? 请教高手:基于彩色静止图象的隐藏算法是怎么回事? mfc中如何加载驱动程序,并与其通信 数组数据如何写入到excel中? 两个对话框之间进行数据传递 编译dll文件时没有产生.lib文件怎么办?
HBITMAP CPicture::LoadImageFromID(UINT nIDRes)
{
try
{
HMODULE hInst=GetModuleHandle(NULL);
LPCTSTR lpRes = MAKEINTRESOURCE(nIDRes);
HRSRC hRsrc = ::FindResource(hInst, lpRes, "JPG");
if (NULL == hRsrc)
return FALSE;
HGLOBAL hGlobal = LoadResource(hInst, hRsrc);
if (NULL == hGlobal)
return FALSE;
DWORD dwSize = SizeofResource(hInst, hRsrc);
LPVOID lpData = LockResource(hGlobal);
if (NULL == lpData)
return FALSE;
// alloc memory based on file size
HGLOBAL hJPG = ::GlobalAlloc(GMEM_MOVEABLE, dwSize);
LPVOID lpJGP = ::GlobalLock(hJPG);
memcpy(lpJGP, lpData, dwSize);
::GlobalUnlock(hJPG);
//LPVOID pvData = GlobalLock(hGlobal);
//_ASSERTE(NULL != pvData);
// read file and store in global memory
LPSTREAM pstm = NULL;
// create IStream* from global memory
HRESULT hr = CreateStreamOnHGlobal(hJPG, TRUE, &pstm);
_ASSERTE(SUCCEEDED(hr) && pstm);
// Create IPicture from image file
LPPICTURE gpPicture;
hr = ::OleLoadPicture(pstm, dwSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture);
_ASSERTE(SUCCEEDED(hr) && gpPicture);
pstm->Release();
OLE_HANDLE m_picHandle;
gpPicture->get_Handle(&m_picHandle);
return (HBITMAP)m_picHandle;
}
catch (...)
{ }
return NULL;
}
//call
CPicture pic;
HBITMAP hbmp=pic.LoadImageFromID(IDR_TODAY);//IDR_TODAY is jpg id
(HBITMAP)::SendMessage(::GetDlgItem(this->m_hWnd,IDC_TODAY), STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hbmp);