VC++6.0 MFC Dialog中显示jpg图片

环境:xp操作系统+VC++6.0MFC Dialog平台

目的:通过一个按钮控件,显示一张jpg格式图片

最近做工程实践的上位机,需要在上位机显示下位机传输过来的图片,该图片格式是jpg,VC++6.0显示jpg很是费事,在网上找了各种方法,下了第三方库CxImage,按照步骤做了,却不行,最后只好换一种方法,最后终于搞定了,用的最原始的方法,文件流的方法。

主要参考的该博客:

非常感谢该博主分享,在我绝望的时候看到了希望,呵呵……

具体步骤如下:

1、在dialog面板拖入Edit Box控件,利用ClassWizard关联一个CEdit型控制成员变量m_edit

或者在dialog面板拖入Static Text控件,利用ClassWizard关联一个CStatic型成员变量m_picture,,感觉这个更好,边界处理更好

2、编辑显示函数,我在这里添加的是XXXDlg的成员函数,代码如下:

bool CShowJPGStreamDlg::ShowJpgGif(CDC *pDC, CString strPath, int x, int y){IStream *pStm;CFileStatus fstatus;CFile file;LONG cb;if (file.Open(strPath,CFile::modeRead)&&file.GetStatus(strPath,fstatus)&&((cb = fstatus.m_size) != -1)){HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);LPVOID pvData = NULL;if (hGlobal != NULL){pvData = GlobalLock(hGlobal);if (pvData != NULL){file.Read(pvData, cb);GlobalUnlock(hGlobal);CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);}} } elsereturn false; //显示JPEG和GIF格式的图片,GIF只能显示一帧,还不能显示动画, //要显示动画GIF请使用ACTIVE控//件。 IPicture *pPic; //load image from file stream if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))) {OLE_XSIZE_HIMETRIC hmWidth;OLE_YSIZE_HIMETRIC hmHeight;pPic->get_Width(&hmWidth);pPic->get_Height(&hmHeight);double fX,fY;//get image height and widthfX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);//use render function display imageif(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))){pPic->Release();return false;}pPic->Release(); }elsereturn false;return true; }

3、拖入一个按钮控件,双击编辑响应函数:

void CShowJPGStreamDlg::OnOK() {// TODO: Add extra validation hereCDC *pDC = m_edit.GetDC();ShowJpgGif(pDC, "test.jpg", 0, 0);}

按确定按钮,显示图片,这里我是把test.jpg图片放在了工程目录下,如果不在,则可以改路径即可。

世上并没有用来鼓励工作努力的赏赐,所有的赏赐都只是被用来奖励工作成果的。

VC++6.0 MFC Dialog中显示jpg图片

相关文章:

你感兴趣的文章:

标签云: