可以用传统的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);