lylfqwer 2017-03-15 19:10 采纳率: 13.2%
浏览 1295
已采纳

vc++2010MFC如何实现分别打开两张JPG图片到控件中?为什么两个控件里的图片是一样?

图片说明
为什么两个控件里的图片是一样?
void CDemoDlg::OnPaint()
{
CPaintDC dc(this);
DrawImage(60,130,&dc);
DrawImage(530,130,&dc);
}

//第一个按钮
void CDemoDlg::OnBnClickedButton1()
{
CString szFilter= _T("JPG Files (*.jpg)|*.jpg|JPEG Files (*.jpeg)|*.jpeg|GIF Files (*.gif)|*.gif|All Files (*.*)|*.*||");
CFileDialog dlg(TRUE,_T("jpg|gif"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
if(dlg.DoModal() == IDOK)
{
CString strPathName1 = dlg.GetPathName();

LoadJPGFile((LPSTR)(LPCTSTR)strPathName1);

Invalidate();//显示图片
}
}

//第二个按钮
void CDemoDlg::OnBnClickedButton2()
{
CString szFilter= _T("JPG Files (*.jpg)|*.jpg|JPEG Files (*.jpeg)|*.jpeg|GIF Files (*.gif)|*.gif|All Files (*.*)|*.*||");
CFileDialog dlg(TRUE,_T("jpg|gif"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
if(dlg.DoModal() == IDOK)
{
CString strPathName1 = dlg.GetPathName();

LoadJPGFile((LPSTR)(LPCTSTR)strPathName1);

Invalidate();//显示图片
}
}

//加载JPG文件到内存
BOOL CDemoDlg::LoadJPGFile(const char *pPathname)
{
CFile file;
if(!file.Open((LPCTSTR)pPathname, CFile::modeRead))
return FALSE;
m_nFileLen=file.GetLength();

HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, m_nFileLen );
LPVOID lpBuf = ::GlobalLock( hMem );
if(file.Read(lpBuf, m_nFileLen )!=m_nFileLen)
return FALSE;
file.Close();
m_pJPGBuffer = (char *)lpBuf;

::GlobalUnlock( hMem );
if ( CreateStreamOnHGlobal( hMem, TRUE, &pStream ) !=S_OK )

return FALSE;
if ( OleLoadPicture(pStream, m_nFileLen, TRUE, IID_IPicture, ( LPVOID * )&pPicture ) !=S_OK )
return FALSE;
return TRUE;
}

//在屏幕上显示JPG图像
void CDemoDlg::DrawImage(int x, int y, CDC *pDC)
{

if (pPicture != NULL)
{
long nWidth,nHeight;

pPicture->get_Width( &nWidth );

pPicture->get_Height( &nHeight );

//图片缩小3/2原大显示
CSize sz( nWidth, nHeight );
pDC->HIMETRICtoDP( &sz );
pPicture->Render(pDC->m_hDC,x,y,sz.cx/1.5,sz.cy/1.5,0,nHeight,nWidth,-nHeight,NULL);

}
}

展开全部

  • 写回答

2条回答 默认 最新

  • yangbo50304 2017-03-15 22:10
    关注

    OnPaint()时,你两个picture控件都会刷成新的图片。你调用的Invalidate();会将整个窗口都刷新,所以两个picture控件都刷新成最新的图片

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 代写uni代码,app唤醒
  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部