想实现在MFC对话框界面上显示文件夹下的JPG图片,请前辈们指点下,在 线等

解决方案 »

  1.   

    正常显示就用CImage,缩略图要麻烦一些
      

  2.   

    在对话框类的OnPaint函数中加载绘制图片:
    void CGDIPictureDlg::OnPaint()
    {
      if (IsIconic())
      {
        CPaintDC dc(this); 
        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);   int cxIcon = GetSystemMetrics(SM_CXICON);
       int cyIcon = GetSystemMetrics(SM_CYICON);
       CRect rect;
       GetClientRect(&rect);
       int x = (rect.Width() - cxIcon + 1) / 2;
       int y = (rect.Height() - cyIcon + 1) / 2;   dc.DrawIcon(x, y, m_hIcon);
      }
      else
      {
         
        //下面为新添加的加载图片的代码
         CDC* pDC = this->GetDC();
        CImage img;
        img.Load(L"D:\\Liuli\\215.jpg");
        img.Draw(pDC->m_hDC,0,0);
        

      }
    }还要在对话框类的头文件中加上:#include "atlimage.h"
      

  3.   

    CImage image; //使用图片类
    image.Load( _T("D:\\Software\\MFC Window\\text\\1000000015.jpg") ); //装载路径下图片信息到图片类 RECT rect = { 0 };
    rect.bottom = image.GetWidth();
    rect.right = image.GetHeight(); CDC* pDC = m_mm.GetWindowDC(); //获得显示控件的DC
    image.Draw( pDC->m_hDC,rect); //图片类的图片绘制Draw函数
    ReleaseDC( pDC );  这样能显示,但是会失真,请问有办法修复下吗??
      

  4.   

    在image.Draw( pDC->m_hDC,rect)这句前面加一句:
    pDC->SetStretchBltMode(STRETCH_HALFTONE); 试一下看看
      

  5.   

     加上一句,改正之前的问题,显示还有一点问题,就是显示显示的只能是图片的一部分,就是从图片的左上角开始算,长和宽 等于控件的长 宽,其余的就显示不出来了,还有就是比如 a b两个图片,a显示部分图片,b的的图片 长  宽小于 控件的长 宽 那b剩余的空间就会显示a的图片??、
      

  6.   

    对话框/对话框上的控件的尺寸 比 图片的尺寸 小,所以就不能完全显示出来
    你第一次加载一张图片后,第二次加载要重新刷新加载,把你画图的那部分代码放Onpaint函数中,需要加载的时候,调用Invalidate()
      

  7.   


    麻烦你帮我分析下这个问题吧,  我在对话框上一个空间用来显示图片,有个按钮可以切换图片,现在图片是能显示出来,就是第一次显示的时候,显示不出来图片,用切换图片按钮,切换下就可以正常了,例如:有 a b c三张图片,想软件启动就显示a,在程序中可以用切换按钮来 实现三个图片的轮流显示,显示现在软件启动时,图片显示不出来,按下切换按钮,显示就正常了
      

  8.   

    IPicture *m_picture; 
    HGLOBAL m_hglobal; 
    long dwlen; //先读取图片.. 
    //OnInitDialog中读取图片数据... 
    CFile file(m_path,CFile::modeRead);//m_path是CString对象,保存的是图片的路径
     dwlen = file.GetLength();
     m_hglobal = GlobalAlloc(GMEM_MOVEABLE , dwlen);
     LPVOID pdata = GlobalLock(m_hglobal);
     file.ReadHuge(pdata,dwlen);
     GlobalUnlock(m_hglobal);
     file.Close();
    // 显示部份
     IStream* m_stream;
     GlobalUnlock(m_hglobal);
     CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream);//在堆上创流对像 OleLoadPicture(m_stream,dwlen,TRUE,IID_IPicture,(LPVOID*)&m_picture); 
    OLE_XSIZE_HIMETRIC m_width; OLE_YSIZE_HIMETRIC m_height;
     m_picture->get_Height(&m_height);
     m_picture->get_Width(&m_width);
     CWnd* pWnd = GetDlgItem(IDC_STATIC1);
    //CStatic控件 
    CDC *pDC = pWnd->GetDC();
     CRect rect; 
    pWnd->GetClientRect(rect); m_picture->Render(*pDC,0,0,rect.Width(),rect.Height(),0,m_height,m_width,-m_height,NULL);就是这段代码