用IPicture显示图片

用IPicture显示图片
void CxxxView::OnDraw(CDC * pDC)
{
    ::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();
}

你可能感兴趣的:(用IPicture显示图片)