1.在MFC控件中选择静态文本控件,放在合适位置。
2.在静态文本控件右键,选择属性。
3.在属性中:
1)设置ID为IDC_STATIC_VIDEO;标题:显示;勾选:可见、组。
2)设置样式:排列文本为居中。
4.添加代码
1)图片显示
需:
1)提前定义 CDC *pDC;
2)在 BOOL CVPlayDlg::OnInitDialog()添加代码:
// TODO: Add extra initialization here
pDC = GetDlgItem(IDC_STATIC_VIDEO)->GetDC();
3)
//本地图片显示
bool CVPlayDlg::ShowJpg(CDC *pDC, CString strPath, int nJpecDataSize, int x, int y)
{
IStream *pStm;
CFileStatus fstatus;
ULONGLONG cb;
CFile file;
// 打开文件并检测文件的有效性
if (!file.Open(strPath,CFile::modeRead))
{
return FALSE;
}
if (!file.GetStatus(strPath,fstatus))
{
return FALSE;
}
if ((cb =fstatus.m_size)<=0)
{
return FALSE;
}
// 根据文件大小分配内存空间,记得释放内存
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, (unsigned int)cb);
if (hGlobal== NULL)
{
GlobalFree(hGlobal) ;
return FALSE;
}
// 锁定刚才分配的内存空间
LPVOID pvData = NULL;
pvData = GlobalLock(hGlobal);
if (pvData == NULL)
{
GlobalFree(hGlobal); // 记得释放内存
return FALSE;
}
// 将文件放到流中
file.Read(pvData,(unsigned int)cb);
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
// 从流中加载图片
//显示JPEG和GIF格式的图片,GIF只能显示一帧,还不能显示动画,
//要显示动画GIF请使用ACTIVE控//件。
IPicture *pPic;
//load image from file stream
// bool result=OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic);
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 width
fX = (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 image
if(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))
{
pPic->Release();
GlobalFree(hGlobal);
return false;
}
pPic->Release();
GlobalFree(hGlobal) ;
}
else
{
GlobalFree(hGlobal);
return false;
}
return true;
}
4)