如何实现jpg图片的导入 如何能象WORD的文件菜单那样,能导入jpg图片。怎样来实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.codeproject.com/bitmap/pictureshow.asp LPPICTURE gpPicture;// open file HANDLE hFile = CreateFile(szFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); _ASSERTE(INVALID_HANDLE_VALUE != hFile); // get file size DWORD dwFileSize = GetFileSize(hFile, NULL); _ASSERTE(-1 != dwFileSize); LPVOID pvData = NULL; // alloc memory based on file size HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); _ASSERTE(NULL != hGlobal); pvData = GlobalLock(hGlobal); _ASSERTE(NULL != pvData); DWORD dwBytesRead = 0; // read file and store in global memory BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL); _ASSERTE(FALSE != bRead); GlobalUnlock(hGlobal); CloseHandle(hFile); LPSTREAM pstm = NULL; // create IStream* from global memory HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm); _ASSERTE(SUCCEEDED(hr) && pstm); // Create IPicture from image file if (gpPicture) gpPicture->Release(); hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture); _ASSERTE(SUCCEEDED(hr) && gpPicture); pstm->Release(); InvalidateRect(ghWnd, NULL, TRUE);long hmWidth; long hmHeight; gpPicture->get_Width(&hmWidth); gpPicture->get_Height(&hmHeight); // convert himetric to pixels int nWidth = MulDiv(hmWidth, GetDeviceCaps(hdc, LOGPIXELSX), HIMETRIC_INCH); int nHeight = MulDiv(hmHeight, GetDeviceCaps(hdc, LOGPIXELSY), HIMETRIC_INCH); RECT rc; GetClientRect(hWnd, &rc); // display picture using IPicture::Render gpPicture->Render(hdc, 0, 0, nWidth, nHeight, 0, hmHeight, hmWidth, -hmHeight, &rc); HRESULT ShowPic(CString lpstrFile, HWND hwnd, int nScrWidth, int nScrHeight){ HDC hDC_Temp = ::GetDC(hwnd); IPicture *pPic; IStream *pStm; BOOL bResult; HANDLE hFile = NULL; DWORD dwFileSize, dwByteRead; // 打开硬盘中的图形文件 hFile = CreateFile(lpstrFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { dwFileSize = GetFileSize(hFile, NULL); // 获取文件字节数 if (dwFileSize == 0xFFFFFFFF) return E_FAIL; } else { return E_FAIL; } // 分配全局存储空间 HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); LPVOID pvData = NULL; if (hGlobal == NULL) return E_FAIL; if ((pvData = GlobalLock(hGlobal)) == NULL) // 锁定分配内存块 return E_FAIL; ReadFile(hFile, pvData, dwFileSize, &dwByteRead, NULL); // 把文件读入内存缓冲区 GlobalUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); // 装入图形文件 bResult=OleLoadPicture(pStm, dwFileSize, TRUE, IID_IPicture, (LPVOID*)&pPic); if(FAILED(bResult)) return E_FAIL; OLE_XSIZE_HIMETRIC hmWidth; // 图片的真实宽度 OLE_YSIZE_HIMETRIC hmHeight; // 图片的真实高度 pPic->get_Width(&hmWidth); pPic->get_Height(&hmHeight); // 将图形输出到屏幕上(有点像BitBlt) bResult = pPic->Render(hDC_Temp, 0, 0, nScrWidth, nScrHeight, 0, hmHeight, hmWidth, -hmHeight, NULL); pPic->Release(); pStm->Release(); CloseHandle(hFile); // 关闭打开的文件 if (SUCCEEDED(bResult)) { return S_OK; } else { return E_FAIL; } } 非托管代码能不能使用gdi+ 排序问题 关于类似CHM文件的适用于IE的自定义协议的开发 大家怎么克服粗心的毛病的。写的程序BUG太多。。。。郁闷 有没有人知道c++中有什么很简单的方法把整型转化成字符串型? 关于socket无法再MFC静态联接下创建问题。 我想要一个能显示bmp,jpg等图象格式的控件,哪位朋友能给我一个吗? 在vc中如何调用xp_cmdshell 怎么在dialog窗体中调另一个dialog窗体?vc不如BC好用拉?! 急!急!急!急!哪里有关于MPEG—1的数据格式的资料? 如果编程来实现cd & dvd 光盘的刻录 如何动态的给静态图片控件加载图片?(SDK开发)
HANDLE hFile = CreateFile(szFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
_ASSERTE(INVALID_HANDLE_VALUE != hFile); // get file size
DWORD dwFileSize = GetFileSize(hFile, NULL);
_ASSERTE(-1 != dwFileSize); LPVOID pvData = NULL;
// alloc memory based on file size
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
_ASSERTE(NULL != hGlobal); pvData = GlobalLock(hGlobal);
_ASSERTE(NULL != pvData); DWORD dwBytesRead = 0;
// read file and store in global memory
BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL);
_ASSERTE(FALSE != bRead);
GlobalUnlock(hGlobal);
CloseHandle(hFile); LPSTREAM pstm = NULL;
// create IStream* from global memory
HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);
_ASSERTE(SUCCEEDED(hr) && pstm); // Create IPicture from image file
if (gpPicture)
gpPicture->Release();
hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture);
_ASSERTE(SUCCEEDED(hr) && gpPicture);
pstm->Release(); InvalidateRect(ghWnd, NULL, TRUE);long hmWidth;
long hmHeight;
gpPicture->get_Width(&hmWidth);
gpPicture->get_Height(&hmHeight);
// convert himetric to pixels
int nWidth = MulDiv(hmWidth, GetDeviceCaps(hdc, LOGPIXELSX), HIMETRIC_INCH);
int nHeight = MulDiv(hmHeight, GetDeviceCaps(hdc, LOGPIXELSY), HIMETRIC_INCH);
RECT rc;
GetClientRect(hWnd, &rc);
// display picture using IPicture::Render
gpPicture->Render(hdc, 0, 0, nWidth, nHeight, 0, hmHeight, hmWidth, -hmHeight, &rc);
{
HDC hDC_Temp = ::GetDC(hwnd); IPicture *pPic;
IStream *pStm; BOOL bResult; HANDLE hFile = NULL;
DWORD dwFileSize, dwByteRead; // 打开硬盘中的图形文件
hFile = CreateFile(lpstrFile,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL); if (hFile != INVALID_HANDLE_VALUE)
{
dwFileSize = GetFileSize(hFile, NULL); // 获取文件字节数
if (dwFileSize == 0xFFFFFFFF)
return E_FAIL;
}
else
{
return E_FAIL;
} // 分配全局存储空间
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
LPVOID pvData = NULL; if (hGlobal == NULL)
return E_FAIL; if ((pvData = GlobalLock(hGlobal)) == NULL) // 锁定分配内存块
return E_FAIL; ReadFile(hFile, pvData, dwFileSize, &dwByteRead, NULL); // 把文件读入内存缓冲区 GlobalUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); // 装入图形文件
bResult=OleLoadPicture(pStm, dwFileSize, TRUE, IID_IPicture, (LPVOID*)&pPic); if(FAILED(bResult))
return E_FAIL; OLE_XSIZE_HIMETRIC hmWidth; // 图片的真实宽度
OLE_YSIZE_HIMETRIC hmHeight; // 图片的真实高度
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight); // 将图形输出到屏幕上(有点像BitBlt)
bResult = pPic->Render(hDC_Temp,
0,
0,
nScrWidth,
nScrHeight,
0,
hmHeight,
hmWidth,
-hmHeight,
NULL); pPic->Release();
pStm->Release(); CloseHandle(hFile); // 关闭打开的文件 if (SUCCEEDED(bResult))
{
return S_OK;
}
else
{
return E_FAIL;
}
}