要求在 Dialog 中显示一幅图像。
我在单文档中用 CImage 搞好的代码移植到 Dialog 的时候,居然没有反应。
这时我在单文档中的代码:
void CEx_ImageView::OnFileOpen()
{
HRESULT hResult;
Image1.Destroy();
hResult = Image1.Load("C:\\test.tif");
Invalidate();
}
void CEx_ImageView::OnDraw(CDC* pDC)
{
CEx_ImageDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!Image1.IsNull()) m_Image.Draw(pDC->m_hDC,0,0);
}这时我在 Dialog 中的代码:
void CDSP02Dlg::OnBnClickedOk()
{
HRESULT hResult;
Image1.Destroy();
hResult = Image1.Load("C:\\test.tif");
CDC* pDC = CDC::FromHandle(Image1.GetDC());
if (!Image1.IsNull()) {
Image1.Draw(pDC->m_hDC,0,0);
}
Invalidate();
}不知道为什么在 Dialog 中不能用?或者有什么别的办法可以在 Dialog 中显示图片的? 
VC7 里面有个 Picture Control 的控件,不知道行不行?怎么用?好像我在 MSDN 里面查不到他?
我对 VC 还是刚入门阶段,希望各位能够说详细一些。谢谢了!

解决方案 »

  1.   

    在对话框中可以使用Pictrue control显示图片,
    只好将图片导进来就可以直接显示了,不用代码.还有一个就是将图片设为对话框的背景:
    Dlg.hCBrush m_brBk;//在public中定义  Dlg.cpp在OnInitialUpdate()中CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP);m_brBk.CreatePatternBrush(&bmp);bmp.DeleteObject(); 在OnCtlColor()中添加if (pWnd == this){    return m_brBk;} 
      

  2.   

    用 Picture Control 可以吗?
    但是我在 MSDN 里面找不到相关的内容啊!
    能不能说说怎么用?
      

  3.   

    给你一个这方面将的比较详细的连接,楼主可以看看
    http://it.563.cn/article/2002/2002-11-20/1662.html希望对你有所帮助!
      

  4.   

    先谢谢两位了:
    我要显示 BMP,HDF,JPEG,PCX,TIFF,XWD 等格式的图片的。
    在 vcforever(霓裳羽衣) 推荐的连接中说的 Kodak图象编辑控件 
    所要的那几个 DLL 和 OCX 我都没有啊!
    我用的是 WinXP + VC7(VC.net里面的那个)
    我所能接触的系统都没有啊!有没有一些直接一点的办法?其实我也很奇怪:为什么在 Document/View 中可以的代码,
    在 Dialog 里面就不可以?
      

  5.   

    楼上的都说了,再介绍一下用IPicture 和IStream 显示图象
       IPicture *pPicture;//声明OLE提供的图像对象
       IStream *pStrm;//声明一个流对象
       CFileStatus fstatus;
       CFile file;
       LONG cb;
       if((file.Open(filename1,CFile::modeRead))&&(file.GetStatus(filename1,fstatus))&&((cb=fstatus.m_size)!=-1))
       {
          HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,cb);
          LPVOID pvData=NULL;
          CDC *pDC;
          pDC=(this->GetActiveWindow())->GetDC();//得到活动视图的设备上下文
          if(hGlobal!=NULL)
          {
             if((pvData=GlobalLock(hGlobal))!=NULL)
             {
                file.Read(pvData,cb);//将图像文件数据读入内存
                GlobalUnlock(hGlobal);
                CreateStreamOnHGlobal(hGlobal,TRUE,&pStrm);//创建流对象
                if(SUCCEEDED(OleLoadPicture(pStrm,fstatus.m_size,TRUE,IID_IPicture,
                         (LPVOID*)&pPicture))) //根据流对象pStrm初始化图像对象pPicture
                {
                   OLE_XSIZE_HIMETRIC Width;
                   OLE_YSIZE_HIMETRIC Height;
                   pPicture->get_Width(&Width);
                   pPicture->get_Height(&Height);
                   //得到图像的宽、高尺寸,注意该尺寸的逻辑单位不是图像的像素
                   if(FAILED(pPicture->Render(*pDC,8,12,300,200,0,Height,Width,-Height,NULL)))
                     //在初始点(100,50)宽为200、高为150的矩形中显示图形
                   AfxMessageBox("Failed to render the picture");
                   pPicture->Release();
                }
                else
                   AfxMessageBox("Error loadimg picture from stream!");
             }
          }
       }
       else
          AfxMessageBox("Can open image file!");
    }
      

  6.   

    http://www.vckbase.com/code/downcode.asp?id=374
    可以显示Bitmap, Gif, Jpeg的屏幕保护程序源代码,使用
      

  7.   

    谢谢 bohut(伯虎) ,收到了你的邮件。
    现在正在研究中 ………