在VC中不使用控件,能否直接显示JPG、GIF图象? 在VC中不使用控件,能否直接显示JPG、GIF图象? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以用动态库。当然,这些动态库是将jpg转换成bmp显示。好像还有一个接口IPicture什么的可以。 http://www.codeproject.com/bitmap/load_jpeg__gif_resource.aspcodeproject上很多的 有一个浏览器ActiveX控件,可以显示jpg和gif等文件 使用IPicture接口,我这里有个函数得到HBitmap句柄,你得到句柄后bitblt到DC就行了HBITMAP CPicture::LoadImageFromID(UINT nIDRes)//nIDSRes为资源ID{ try { HMODULE hInst=GetModuleHandle("Test.dll"); 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;} 有可能不用那么麻烦,如果你用的是vs.net的话,VC++.net中带的MFC库中的CImage就可以了,先Load一下,然后在OnPaint中StrechBlt一下就行了 fread读取TXT文件中的字符和数据的问题 用CFile类,如何判断文件末尾 拿了别人做的项目,生成成功却看不到结果 散分咯~~~ 110分 请问调用window api的编译设置问题? 请高手帮忙:在COM中使用事件的问题 在IDL定义中不能定义重载函数吗? 简单问题高手们请进...参与者有分! 请各位多多帮忙,非常感谢 SDK编程中如何得到单选框的状态值?也就是怎么知道哪个被选中? 关于这个函数GlobalLock() 我写的dll突然不能用了
codeproject上很多的
HBITMAP CPicture::LoadImageFromID(UINT nIDRes)//nIDSRes为资源ID
{
try
{
HMODULE hInst=GetModuleHandle("Test.dll");
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;
}