VS2005 MFC 中,怎样在PICTURE CONTROL 中,显示一副JPG图片。 图片路径"res/back.jpg"。图片大小比PICTURE CONTROL大,需要按比例压缩一下。试了不少方法,都不行。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个控件好像不支持JPG文件吧 。。这样啊。那怎样在一个dialog里面全屏显示一副JPG图片呢? 用CImage类,CImage img;img.Load(图片路径)img.Draw(pic-control的HDC) 想省事可以使用bmp之类的图片。 给个函数吧:::CoInitialize(NULL); // COM 初始化 HRESULT hr; CFile file; file.Open( "c:\\aa.jpg", CFile::modeRead | CFile::shareDenyNone ); // 读入文件内容 DWORD dwSize = file.GetLength(); HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize ); LPVOID lpBuf = ::GlobalLock( hMem ); file.ReadHuge( lpBuf, dwSize ); file.Close(); ::GlobalUnlock( hMem ); IStream * pStream = NULL; IPicture * pPicture = NULL; // 由 HGLOBAL 得到 IStream,参数 TRUE 表示释放 IStream 的同时,释放内存 hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream ); ASSERT ( SUCCEEDED(hr) ); hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture ); ASSERT(hr==S_OK); long nWidth,nHeight; // 宽高,MM_HIMETRIC 模式,单位是0.01毫米 pPicture->get_Width( &nWidth ); // 宽 pPicture->get_Height( &nHeight ); // 高 ////////原大显示////// CSize sz( nWidth, nHeight ); pDC->HIMETRICtoDP( &sz ); // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位 pPicture->Render(pDC->m_hDC,0,0,sz.cx,sz.cy, 0,nHeight,nWidth,-nHeight,NULL); ////////按窗口尺寸显示////////// CRect rect; GetClientRect(&rect);// pPicture->Render(pDC->m_hDC,0,0,rect.Width(),rect.Height(),// 0,nHeight,nWidth,-nHeight,NULL); if ( pPicture ) pPicture->Release();// 释放 IPicture 指针 if ( pStream ) pStream->Release(); // 释放 IStream 指针,同时释放了 hMem ::CoUninitialize();}这个可以显示JPG图片,用的时候将它写成一个函数,其中pDC是你想显示的图片窗体的DC指针. 求教:VC++如何检测是否存在内存泄露?? 请教,Socket如何实现广播功能 请问我一个对话框里有100个编辑框,怎么给它们批量赋值呢? 这个初始化的值是什么? 能否给我推荐一个曲线显示的控件,要求有网格和刻度的? 第三方通过ftp client与ftp server进行交互,请各位指教 100分!请问各位朋友,我想对文件的bit进行分析,判断,筛选,应该如何写? 讨论一下:对于有IPC空连接的机器,用那种编程方式更好! 請問怎麼將一幅照片Draw到一個球面上去?有這方面的代碼嗎? ToolBar 如何 用其他的程序的 郁闷之极,CSDN怎么搞得!!! 求TCP/IP详解一书源码
。。这样啊。那怎样在一个dialog里面全屏显示一副JPG图片呢?
img.Load(图片路径)
img.Draw(pic-control的HDC)
::CoInitialize(NULL); // COM 初始化
HRESULT hr;
CFile file;
file.Open( "c:\\aa.jpg", CFile::modeRead | CFile::shareDenyNone ); // 读入文件内容
DWORD dwSize = file.GetLength();
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
LPVOID lpBuf = ::GlobalLock( hMem );
file.ReadHuge( lpBuf, dwSize );
file.Close();
::GlobalUnlock( hMem );
IStream * pStream = NULL;
IPicture * pPicture = NULL;
// 由 HGLOBAL 得到 IStream,参数 TRUE 表示释放 IStream 的同时,释放内存
hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );
ASSERT ( SUCCEEDED(hr) );
hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture );
ASSERT(hr==S_OK);
long nWidth,nHeight; // 宽高,MM_HIMETRIC 模式,单位是0.01毫米
pPicture->get_Width( &nWidth ); // 宽
pPicture->get_Height( &nHeight ); // 高
////////原大显示//////
CSize sz( nWidth, nHeight );
pDC->HIMETRICtoDP( &sz ); // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位
pPicture->Render(pDC->m_hDC,0,0,sz.cx,sz.cy,
0,nHeight,nWidth,-nHeight,NULL);
////////按窗口尺寸显示////////
// CRect rect; GetClientRect(&rect);
// pPicture->Render(pDC->m_hDC,0,0,rect.Width(),rect.Height(),
// 0,nHeight,nWidth,-nHeight,NULL);
if ( pPicture ) pPicture->Release();// 释放 IPicture 指针
if ( pStream ) pStream->Release(); // 释放 IStream 指针,同时释放了 hMem
::CoUninitialize();
}这个可以显示JPG图片,用的时候将它写成一个函数,其中pDC是你想显示的图片窗体的DC指针.