可以用传统的MCI,也可以用新的IDirectShow等COM.MCI:(虽然给出的为影像,但改为midi同样有效)以下为程序片断:HWND hMciWnd = NULL; //载入影像且调整影像窗口
if (hMciWnd) //如果有原先影像窗口,则关闭
{
MCIWndDestroy(hMciWnd);
hMciWnd = NULL;
} hMciWnd = MCIWndCreate(m_hWnd,
AfxGetInstanceHandle(),
//WS_POPUP|WS_CHILD|
MCIWNDF_NOTIFYPOS|MCIWNDF_NOMENU|
MCIWNDF_NOPLAYBAR,
sVideoFile); if (!hMciWnd)
{
MessageBox("载入影像失败");
} //调整影像窗口
::MoveWindow(hMciWnd,LEFT_EDGE,
TOP_EDGE+(nScrHeight-TOP_EDGE)/2-85,
nScrWidth/2-LEFT_EDGE-MIDDLE_WIDTH,
(nScrHeight-TOP_EDGE)/2+60,false);COM: //调用影像组件
IGraphBuilder *pGraphBuilder=NULL;
hres=CoInitialize(NULL); //初始化组建对象 if(FAILED(hres))
{
MessageBox("Failed to Initialize!");
return;
} hres=CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,
IID_IGraphBuilder,(void**)&pGraphBuilder);
if(FAILED(hres))
{
MessageBox("Failed to create!");
return;
}
m_pGraphBuilder=pGraphBuilder;
//
hres=m_pGraphBuilder->RenderFile(pszW,NULL);
CoTaskMemFree((LPVOID)pszW);
if(FAILED(hres))
{
//CoTaskMemFree((LPVOID)pszW);
MessageBox("Can not open the file!");
return;
} hres=m_pGraphBuilder->QueryInterface(IID_IVideoWindow,(void**)&m_pVideoWindow);
if(FAILED(hres))
{
return ;
} hres=m_pGraphBuilder->QueryInterface(IID_IMediaControl,(void**)&m_pMediaControl);
if(FAILED(hres))
{
return ;
} hres=m_pGraphBuilder->QueryInterface(IID_IMediaEvent,(void**)&m_pMediaEvent);
if(FAILED(hres))
{
return ;
}
hres=m_pGraphBuilder->QueryInterface(IID_IMediaSeeking,(void**)&m_pMediaSeeking);
if(FAILED(hres))
{
return;
}
hres=m_pVideoWindow->put_Owner((OAHWND)m_hWnd);
if(FAILED(hres))
{
return;
} hres=m_pVideoWindow->put_WindowStyle(WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS);
if(FAILED(hres))
{
return;
} //填充本影像片断的相关内容
hres = m_pMediaSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME);
m_lMovieBegin = 1;
hres = m_pMediaSeeking->GetDuration(&m_lMovieEnd);
m_lMovieLength = m_lMovieEnd - m_lMovieBegin; hres = m_pVideoWindow->SetWindowPosition(MAP_RECT.left,MAP_RECT.top,MAP_RECT.Width(),
MAP_RECT.Height());
hres = m_pVideoWindow->put_Visible(-1);
if (hMciWnd) //如果有原先影像窗口,则关闭
{
MCIWndDestroy(hMciWnd);
hMciWnd = NULL;
} hMciWnd = MCIWndCreate(m_hWnd,
AfxGetInstanceHandle(),
//WS_POPUP|WS_CHILD|
MCIWNDF_NOTIFYPOS|MCIWNDF_NOMENU|
MCIWNDF_NOPLAYBAR,
sVideoFile); if (!hMciWnd)
{
MessageBox("载入影像失败");
} //调整影像窗口
::MoveWindow(hMciWnd,LEFT_EDGE,
TOP_EDGE+(nScrHeight-TOP_EDGE)/2-85,
nScrWidth/2-LEFT_EDGE-MIDDLE_WIDTH,
(nScrHeight-TOP_EDGE)/2+60,false);COM: //调用影像组件
IGraphBuilder *pGraphBuilder=NULL;
hres=CoInitialize(NULL); //初始化组建对象 if(FAILED(hres))
{
MessageBox("Failed to Initialize!");
return;
} hres=CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,
IID_IGraphBuilder,(void**)&pGraphBuilder);
if(FAILED(hres))
{
MessageBox("Failed to create!");
return;
}
m_pGraphBuilder=pGraphBuilder;
//
hres=m_pGraphBuilder->RenderFile(pszW,NULL);
CoTaskMemFree((LPVOID)pszW);
if(FAILED(hres))
{
//CoTaskMemFree((LPVOID)pszW);
MessageBox("Can not open the file!");
return;
} hres=m_pGraphBuilder->QueryInterface(IID_IVideoWindow,(void**)&m_pVideoWindow);
if(FAILED(hres))
{
return ;
} hres=m_pGraphBuilder->QueryInterface(IID_IMediaControl,(void**)&m_pMediaControl);
if(FAILED(hres))
{
return ;
} hres=m_pGraphBuilder->QueryInterface(IID_IMediaEvent,(void**)&m_pMediaEvent);
if(FAILED(hres))
{
return ;
}
hres=m_pGraphBuilder->QueryInterface(IID_IMediaSeeking,(void**)&m_pMediaSeeking);
if(FAILED(hres))
{
return;
}
hres=m_pVideoWindow->put_Owner((OAHWND)m_hWnd);
if(FAILED(hres))
{
return;
} hres=m_pVideoWindow->put_WindowStyle(WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS);
if(FAILED(hres))
{
return;
} //填充本影像片断的相关内容
hres = m_pMediaSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME);
m_lMovieBegin = 1;
hres = m_pMediaSeeking->GetDuration(&m_lMovieEnd);
m_lMovieLength = m_lMovieEnd - m_lMovieBegin; hres = m_pVideoWindow->SetWindowPosition(MAP_RECT.left,MAP_RECT.top,MAP_RECT.Width(),
MAP_RECT.Height());
hres = m_pVideoWindow->put_Visible(-1);
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货