原文链接:ATL Windowless ActiveX Media Container
这个ATL activeX框架适用于作为Windows Media Player,Flash以及Sliverlight动画的承载容器。整个框架分布在Windowless文件夹下,共有6个文件。架构如图所示:

使用Adobe Flash Player作为子控件

主要代码如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
class
CMainDlg:
public
CAxWindowlessHost
<
CMainDlg
>
LRESULTCMainDlg::OnInitDialog(UINT /* uMsg */ ,WPARAM /* wParam */ ,LPARAM /* lParam */ ,BOOL & /* bHandled */ )
{
// centerthedialogonthescreen
CenterWindow();
// seticons
HICONhIcon = (HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXICON),::GetSystemMetrics(SM_CYICON),LR_DEFAULTCOLOR);
SetIcon(hIcon,TRUE);
HICONhIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXSMICON),::GetSystemMetrics(SM_CYSMICON),LR_DEFAULTCOLOR);
SetIcon(hIconSmall,FALSE);
TCHARszPath[MAX_PATH] = { 0 };
if (::GetModuleFileName(NULL,szPath,MAX_PATH) > 0 )
{ // 定位.swf文件
LPTSTRpszSep = _tcsrchr(szPath,TCHAR( ' // ' ));
pszSep ++ ;
* pszSep = 0 ;
::StringCchCat(szPath,MAX_PATH,_T( " Construction.swf " ));
}
// InitializeFlashPlayer(Shockwave.swf)
HRESULThr;
ActiveXSite * pSite;
pSite = CAxWindowlessHost < CMainDlg > ::GetControlSite(IDC_SHOCKWAVEFLASH); // 获取flashplayer子控件
if (pSite != NULL)
{
CComQIPtr < IShockwaveFlash > spFlash = pSite -> ActiveXControl();
hr = spFlash -> put_WMode(CComBSTR( " Transparent " )); // 设置“透明”
hr = spFlash -> put_Movie(CComBSTR(szPath)); // 设置影片源文件
}
return TRUE;
}
LRESULTCMainDlg::OnInitDialog(UINT /* uMsg */ ,WPARAM /* wParam */ ,LPARAM /* lParam */ ,BOOL & /* bHandled */ )
{
// centerthedialogonthescreen
CenterWindow();
// seticons
HICONhIcon = (HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXICON),::GetSystemMetrics(SM_CYICON),LR_DEFAULTCOLOR);
SetIcon(hIcon,TRUE);
HICONhIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXSMICON),::GetSystemMetrics(SM_CYSMICON),LR_DEFAULTCOLOR);
SetIcon(hIconSmall,FALSE);
TCHARszPath[MAX_PATH] = { 0 };
if (::GetModuleFileName(NULL,szPath,MAX_PATH) > 0 )
{ // 定位.swf文件
LPTSTRpszSep = _tcsrchr(szPath,TCHAR( ' // ' ));
pszSep ++ ;
* pszSep = 0 ;
::StringCchCat(szPath,MAX_PATH,_T( " Construction.swf " ));
}
// InitializeFlashPlayer(Shockwave.swf)
HRESULThr;
ActiveXSite * pSite;
pSite = CAxWindowlessHost < CMainDlg > ::GetControlSite(IDC_SHOCKWAVEFLASH); // 获取flashplayer子控件
if (pSite != NULL)
{
CComQIPtr < IShockwaveFlash > spFlash = pSite -> ActiveXControl();
hr = spFlash -> put_WMode(CComBSTR( " Transparent " )); // 设置“透明”
hr = spFlash -> put_Movie(CComBSTR(szPath)); // 设置影片源文件
}
return TRUE;
}
使用Windows Meida Player作为子控件

主要代码如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
LRESULTCMainDlg::OnInitDialog(UINT
/*
uMsg
*/
,WPARAM
/*
wParam
*/
,LPARAM
/*
lParam
*/
,BOOL
&
/*
bHandled
*/
)
{
// centerthedialogonthescreen
CenterWindow();
// seticons
HICONhIcon = (HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXICON),::GetSystemMetrics(SM_CYICON),LR_DEFAULTCOLOR);
SetIcon(hIcon,TRUE);
HICONhIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXSMICON),::GetSystemMetrics(SM_CYSMICON),LR_DEFAULTCOLOR);
SetIcon(hIconSmall,FALSE);
// InitializeWindowsMediaPlayer
HRESULThr;
ActiveXSite * pSite;
pSite = CAxWindowlessHost < CMainDlg > ::GetControlSite(IDC_WMP11); // 获取MeidaPlayer子控件
if (pSite != NULL)
{
pSite -> SetAllowResize( false ); // 不允许自动调整大小
CComQIPtr < IWMPCore > wmp = pSite -> ActiveXControl();
CComQIPtr < IWMPPlayer4 > wmp4 = pSite -> ActiveXControl();
// thiscanbedonemanuallyaswell
if (wmp4)
{
hr = wmp4 -> put_windowlessVideo(VARIANT_TRUE); // 无窗口模式
// hr=wmp4->put_uiMode(CComBSTR("Full")); // 填充模式
}
// hr=wmp->put_URL(CComBSTR("c://temp//videofile.wmv")); // 多媒体文件地址
}
return TRUE;
}
LRESULTCMainDlg::OnBnClickedBtnBrowse(WORD /* wNotifyCode */ ,WORD /* wID */ ,HWND /* hWndCtl */ ,BOOL & /* bHandled */ )
{ // 选择多媒体文件
static LPCTSTRpszFilter = _T( " VideoFiles(*.avi;*.mpg;*.wmv)/0*.avi;*.mpg;*.wmv/0/0 " );
CFileDialogfileOpen(TRUE,_T( " avi " ),NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,pszFilter /* ,m_hWnd */ );
if (IDOK == fileOpen.DoModal())
{
ActiveXSite * pSite;
pSite = CAxWindowlessHost < CMainDlg > ::GetControlSite(IDC_WMP11);
SetDlgItemText(IDC_TXT_FILENAME,fileOpen.m_szFileName);
CComQIPtr < IWMPPlayer4 > wmp4 = pSite -> ActiveXControl();
wmp4 -> close();
wmp4 -> put_URL(CComBSTR(fileOpen.m_szFileName));
}
return 0 ;
}
{
// centerthedialogonthescreen
CenterWindow();
// seticons
HICONhIcon = (HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXICON),::GetSystemMetrics(SM_CYICON),LR_DEFAULTCOLOR);
SetIcon(hIcon,TRUE);
HICONhIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXSMICON),::GetSystemMetrics(SM_CYSMICON),LR_DEFAULTCOLOR);
SetIcon(hIconSmall,FALSE);
// InitializeWindowsMediaPlayer
HRESULThr;
ActiveXSite * pSite;
pSite = CAxWindowlessHost < CMainDlg > ::GetControlSite(IDC_WMP11); // 获取MeidaPlayer子控件
if (pSite != NULL)
{
pSite -> SetAllowResize( false ); // 不允许自动调整大小
CComQIPtr < IWMPCore > wmp = pSite -> ActiveXControl();
CComQIPtr < IWMPPlayer4 > wmp4 = pSite -> ActiveXControl();
// thiscanbedonemanuallyaswell
if (wmp4)
{
hr = wmp4 -> put_windowlessVideo(VARIANT_TRUE); // 无窗口模式
// hr=wmp4->put_uiMode(CComBSTR("Full")); // 填充模式
}
// hr=wmp->put_URL(CComBSTR("c://temp//videofile.wmv")); // 多媒体文件地址
}
return TRUE;
}
LRESULTCMainDlg::OnBnClickedBtnBrowse(WORD /* wNotifyCode */ ,WORD /* wID */ ,HWND /* hWndCtl */ ,BOOL & /* bHandled */ )
{ // 选择多媒体文件
static LPCTSTRpszFilter = _T( " VideoFiles(*.avi;*.mpg;*.wmv)/0*.avi;*.mpg;*.wmv/0/0 " );
CFileDialogfileOpen(TRUE,_T( " avi " ),NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,pszFilter /* ,m_hWnd */ );
if (IDOK == fileOpen.DoModal())
{
ActiveXSite * pSite;
pSite = CAxWindowlessHost < CMainDlg > ::GetControlSite(IDC_WMP11);
SetDlgItemText(IDC_TXT_FILENAME,fileOpen.m_szFileName);
CComQIPtr < IWMPPlayer4 > wmp4 = pSite -> ActiveXControl();
wmp4 -> close();
wmp4 -> put_URL(CComBSTR(fileOpen.m_szFileName));
}
return 0 ;
}
使用Sliverlight作为子控件

主要代码如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
LRESULTCMainDlg::OnInitDialog(UINT
/*
uMsg
*/
,WPARAM
/*
wParam
*/
,LPARAM
/*
lParam
*/
,BOOL
&
/*
bHandled
*/
)
{
// centerthedialogonthescreen
CenterWindow();
// seticons
HICONhIcon = (HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXICON),::GetSystemMetrics(SM_CYICON),LR_DEFAULTCOLOR);
SetIcon(hIcon,TRUE);
HICONhIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXSMICON),::GetSystemMetrics(SM_CYSMICON),LR_DEFAULTCOLOR);
SetIcon(hIconSmall,FALSE);
// InitializeSilverlightControl(thisisnotwindowlessbutcoolanyway)
HRESULThr;
ActiveXSite * pSite;
pSite = CAxWindowlessHost < CMainDlg > ::GetControlSite(IDC_AGCONTROL1); // 获取SliverLight子控件
if (pSite != NULL)
{
// disableright-click!
pSite -> SetAllowRClick( false ); // 禁止掉右键
// loadfromURL
// CComBSTRbstrUrl("file: // /c://temp//SortTheFootbars.xap");
CComBSTRbstrUrl( " http://www.andybeaulieu.com/silverlight/2.0/sortthefoobars/ClientBin/SortTheFoobars.xap " );
pSite -> SetUrl(bstrUrl); // 设置多媒体源文件
CComQIPtr < IXcpControl2 > slight = pSite -> ActiveXControl();
hr = slight -> put_Source(bstrUrl);
}
return TRUE;
}
{
// centerthedialogonthescreen
CenterWindow();
// seticons
HICONhIcon = (HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXICON),::GetSystemMetrics(SM_CYICON),LR_DEFAULTCOLOR);
SetIcon(hIcon,TRUE);
HICONhIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDR_MAINFRAME),
IMAGE_ICON,::GetSystemMetrics(SM_CXSMICON),::GetSystemMetrics(SM_CYSMICON),LR_DEFAULTCOLOR);
SetIcon(hIconSmall,FALSE);
// InitializeSilverlightControl(thisisnotwindowlessbutcoolanyway)
HRESULThr;
ActiveXSite * pSite;
pSite = CAxWindowlessHost < CMainDlg > ::GetControlSite(IDC_AGCONTROL1); // 获取SliverLight子控件
if (pSite != NULL)
{
// disableright-click!
pSite -> SetAllowRClick( false ); // 禁止掉右键
// loadfromURL
// CComBSTRbstrUrl("file: // /c://temp//SortTheFootbars.xap");
CComBSTRbstrUrl( " http://www.andybeaulieu.com/silverlight/2.0/sortthefoobars/ClientBin/SortTheFoobars.xap " );
pSite -> SetUrl(bstrUrl); // 设置多媒体源文件
CComQIPtr < IXcpControl2 > slight = pSite -> ActiveXControl();
hr = slight -> put_Source(bstrUrl);
}
return TRUE;
}
本文介绍了一个基于ATL的框架,该框架能够作为Windows Media Player、Flash及Silverlight等多媒体控件的承载容器。文章详细展示了如何通过代码初始化这些控件并设置其属性。
934

被折叠的 条评论
为什么被折叠?



