在Static上显示JPG图像,但图像显示实际大小,有时候图像稍微大点,或小点,,如何使图像大小自适应Static固定边框?
例如简历上面的图片框大小是固定的。谢谢
void CShowJPGDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
        IStream *m_pStream;
        IPicture *m_pPictrue;
        OLE_XSIZE_HIMETRIC m_JPGWidth;
        OLE_YSIZE_HIMETRIC m_JPGHeight;
        HGLOBAL hMem;
        CFile file;
        if (!file.Open("mydog.jpg",CFile::modeReadWrite))
        {
                MessageBox("open file failed!");
        }
        
        DWORD len=file.GetLength();         //这边改成内存图片数据的长度
        hMem=GlobalAlloc(GMEM_MOVEABLE,len);
        LPVOID pData=NULL;
        pData=GlobalLock(hMem);
        file.ReadHuge(pData,len);           //把这里的从文件读数据,改成从内存读数据
        file.Close();
        
        
        GlobalUnlock(hMem);
        CreateStreamOnHGlobal(hMem,TRUE,&m_pStream);
        OleLoadPicture(m_pStream,len,TRUE,IID_IPicture,(LPVOID*)&m_pPictrue);
        m_pPictrue->get_Height(&m_JPGHeight);
        m_pPictrue->get_Width(&m_JPGWidth);
        CRect lpRec; 
        GetDlgItem(IDC_STATIC1)->GetWindowRect(&lpRec); 
        ScreenToClient(&lpRec);
        m_pPictrue->Render(GetDC()->m_hDC,lpRec.left,lpRec.top,(int)(m_JPGWidth/26.45),(int)(m_JPGHeight/26.45),0,m_JPGHeight,m_JPGWidth,-m_JPGHeight,NULL);}

解决方案 »

  1.   

    借花献佛
    http://topic.csdn.net/u/20070301/00/4b27d45d-355f-4bd3-939f-e8696ce6c1ab.html?73733
      

  2.   

    上面的网址介绍的方法里用到的函数放在static控件里的派生类里操作,也就是你先派生一个STATIC控件类,然后再用介绍的两个函数
      

  3.   

    http://www.evget.com/zh-CN/Info/catalog/5985.html
      

  4.   

    看了一下那个控件是位图,jpg还是不知道如何弄?
      

  5.   

    谢谢楼上的,思路有了,学习上面的控件代码BMP图像能够自适应, 考虑用GDI+ 将JPG 转成 BMP 在用自适应代码就好了,正在学习,
      

  6.   

    找个一个类CPictureCtrl JPG,BMP图像都能适应,谢谢大家
      

  7.   

    修改了了一下代码全通过了,BMP,JPG 格式全支持自动适应CStatic绘图区
    贴来给大家共享,,谢谢大家的支持
    void CJpgDlg::OnButton1() 
    {
            IStream *m_pStream;
            IPicture *m_pPictrue;
            OLE_XSIZE_HIMETRIC m_JPGWidth;
            OLE_YSIZE_HIMETRIC m_JPGHeight;
            HGLOBAL hMem;
            CFile file;
            if (!file.Open("c:\\a0.bmp",CFile::modeReadWrite))
            {
                    MessageBox("open file failed!");
                    return;
            }
            
            DWORD len=file.GetLength();         //这边改成内存图片数据的长度
            hMem=GlobalAlloc(GMEM_MOVEABLE,len);
            LPVOID pData=NULL;
            pData=GlobalLock(hMem);
            file.ReadHuge(pData,len);           //把这里的从文件读数据,改成从内存读数据
            file.Close();        
            
            GlobalUnlock(hMem);
            CreateStreamOnHGlobal(hMem,TRUE,&m_pStream);
            OleLoadPicture(m_pStream,len,TRUE,IID_IPicture,(LPVOID*)&m_pPictrue);
            m_pPictrue->get_Height(&m_JPGHeight);
            m_pPictrue->get_Width(&m_JPGWidth);
            CRect lpRec; 
            GetDlgItem(IDC_STATIC1)->GetWindowRect(&lpRec); 
            ScreenToClient(&lpRec);
            m_pPictrue->Render(GetDC()->m_hDC,lpRec.left,lpRec.top,lpRec.Width(),lpRec.Height(),0,m_JPGHeight,m_JPGWidth,-m_JPGHeight,NULL);
    }
      

  8.   

    双缓存
    BitBlt还是和他差不多的那个函数,可以给比例缩放