请教众高手 在MFC中我的工程是以单文档为基础的 我如果想读入一个.bmp或.jpg图片并在客户区显示出来 应当如何操作呢?

解决方案 »

  1.   

    让你的C*View继承自CHtmlView就可以了,可以用它打开图片,还可以当成IE用呢。
      

  2.   

    以下是我以前项目里的一小段代码,仅供参考
    //此函数是通过文件对话框获得图像文件路径
    //首先定义IStream *m_pstrm 指向一个数据流对象的指针
    //IPicture *m_IpPic; 指向一个OLE对象的指针
    void CShowpictureDlg::OnBrower() 
    {
    // TODO: Add your control notification handler code here
        CWnd* pdlg_edit;
    CFileDialog dlg(TRUE,"jpg","*.jpg",
                         OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
                          "JPEG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif||",NULL);

    if(dlg.DoModal()==IDOK)
    {m_strPath=dlg.GetPathName();
     Invalidate();
      ......
             }}
    此函数是把图像数据读入到内存区
    void CShowpictureDlg::toStream() 
    {
    // TODO: Add your control notification handler code here

    CFile file;
    CFileStatus fstatus;
    LONG cb;
        if(m_strPath.GetLength()<=0){return;}   //文件路径为空时退出过程 //以只读方式打开图像文件
    if(file.Open(m_strPath,CFile::modeRead)==FALSE)
    {
    file.Close();
    return;
    }
       
    //检查文件状态,
    if(file.GetStatus(m_strPath,fstatus)==FALSE)
    {
    file.Close();
    return;
    } cb=fstatus.m_size;  //得到文件字节数    HGLOBAL hglobal=GlobalAlloc(GMEM_MOVEABLE, cb);  // GMEM_MOVEABLE表示活动的   
        LPVOID pvData =GlobalLock(hglobal);  //锁定内存对象
    if(hglobal!=NULL)
    {
     if(pvData!=NULL)
       {
    file.ReadHuge(pvData,cb);
    GlobalUnlock(hglobal);

    CreateStreamOnHGlobal(hglobal,TRUE,&m_pstrm);

         if(FAILED(OleLoadPicture(m_pstrm,cb,TRUE,IID_IPicture,(LPVOID*)&m_IpPic)))   
          return;

    }
     }
    }//以下函数是显示图像
    void CShowpictureDlg::toDraw()
    {
     
         OLE_XSIZE_HIMETRIC hmWidth;
      OLE_YSIZE_HIMETRIC hmHeight;
          m_IpPic->get_Width(&hmWidth);
          m_IpPic->get_Height(&hmHeight);   if(m_IpPic==NULL)return;   double fx=0.0,fy=0.0;
        
     CWnd *pwnd=GetDlgItem(IDC_FRAME); //获得控件的对象指针
         CDC *pDc=pwnd->GetDC();
         pDc->SetBkColor(RGB(0,255,255));
         fx=(double)pDc->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDc->GetDeviceCaps(HORZRES)*70.0);
         fy=(double)pDc->GetDeviceCaps(VERTRES)*(double)hmWidth/((double)pDc->GetDeviceCaps(VERTRES)*70.0);

        if(FAILED(m_IpPic->Render(*pDc,2,8,(DWORD)fx,(DWORD)fy,0,hmHeight,hmWidth,-hmHeight,NULL)))
    {
    AfxMessageBox("绘画图像过程中发生错误!");
            m_IpPic->Release();

    }
    }
      

  3.   

    edit your bitmap in resource editor, then in your project use LoadBitmap() function to load you bitmap resource.
      

  4.   

    那么用到的基本API和流程和2楼的一样吗?