有图片流文件,如何读取显示到模态对话框里,以下代码可以在主对话框显示图片,为什么模态对话框里显示不了,调试了下,分配内存没成功,请问这是怎么回事?
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);
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);
解决方案 »
- vc2008已经自带regex库了,与boost的有区别吗?
- 对话框程序调试出现:debug assertion failed!
- 网络通讯,一边是串口转网口发数据,我做软件接收数据,有问题请教
- 一个小
- rand()函数随机了6个数,为什么每次启动时都一样呀????
- 向高手救助:如果获取文件路径
- 大家推荐几本关于网络视频传输的好书!还有采集卡及摄像头,主要做网络视频会议!
- 各位c++迷,进进来看一看几道简单的题,看看您能得多少分
- 请问
- redis windows client 谁搞过?
- 我建了一个基于对话框的工程,编程后将其复制,在复制后的工程里添加Edit及Combo Box控件时,为他们添加变量,运行后出错?
- 用SOCKET编写的服务器程序,电脑访问没问题,USB连接访问失败??
CMyDialog dlg;
dlg.DoModal();
显示模态对话框
上面代码定义在showimage();函数里
再在模态对话框OnPaint里调用的 和主对话框一样使用的 主对话框可显示图片,模态对话框显示不了,内存空间不能分配???
他封装了BeginPaint、EndPaint的相关操作
重复定义自然会破坏这个调用结构