有图片流文件,如何读取显示到模态对话框里,以下代码可以在主对话框显示图片,为什么模态对话框里显示不了,调试了下,分配内存没成功,请问这是怎么回事?
DWORD dwSize = file1.GetLength(); 
HGLOBAL hMem = ::GlobalAlloc( GMEM_ZEROINIT, dwSize ); //返回分配内存句柄
if(hMem)
{

AfxMessageBox("分配内存失败");//模态对话框里一直显示失败?
return;
}
LPVOID lpBuf = ::GlobalLock( hMem ); 

file1.ReadHuge( lpBuf, dwSize ); 
file1.Close(); 
::GlobalUnlock( hMem );  


hr = ::CreateStreamOnHGlobal(hMem,TRUE,&pStream1 ); 
ASSERT(SUCCEEDED(hr)); 

hr = ::OleLoadPicture(pStream1, dwSize, TRUE, IID_IPicture,(LPVOID *)&pPicture1); 
ASSERT(hr==S_OK); 

long nWidth,nHeight;
pPicture1->get_Width( &nWidth );
pPicture1->get_Height( &nHeight );
CSize sz(nWidth,nHeight);
dc.HIMETRICtoDP(&sz);

pPicture1->Render(dc.m_hDC,200,150,sz.cx,sz.cy,0,nHeight,nWidth,-nHeight,NULL); 
CRect rect(200,150,sz.cx + 200,sz.cy + 150);

解决方案 »

  1.   

    DWORD k=GetLastError();  怎么返回的是值是0
      

  2.   

    VC 模态对话框啊 在对话框里再插入一个对话框
    CMyDialog dlg;
    dlg.DoModal();
    显示模态对话框
    上面代码定义在showimage();函数里
    再在模态对话框OnPaint里调用的 和主对话框一样使用的 主对话框可显示图片,模态对话框显示不了,内存空间不能分配???
      

  3.   

    汗 我错了 那个if判断搞错了 应该是 if(hMem == NULL)但图片还是不能显示,就算内存分配成功了,错在哪呢??
      

  4.   

    两个对话框的OnPaint你都是怎么写的
      

  5.   

    汗 悲催 原来多定义了个CPaintDC dc(this);函数里也写了但还是不知道 为什么OnPaint和showimage();都有CPaintDC dc(this);就不显示图片,求解
      

  6.   

    两个对话框的OnPaint你都是怎么写的
      

  7.   

    CPicture类可实现流数据图片的显示!同样使用的是IPicture*
      

  8.   

    CPaintDC是专门用于OnPaint中的DC
    他封装了BeginPaint、EndPaint的相关操作
    重复定义自然会破坏这个调用结构