[ATL/ActiveX]全屏显示ActiveX控件

现在很多视频共享网站如土豆等都使用flash控件作为播放器界面,而利用flash实现全屏非常简单,只要把fullscreen属性设置为true即可,其他的播放器如mediaplayer等都有类似实现全屏效果的属性,但是怎么在自定义的ActiveX控件实现这种效果呢?基本的实现其实比较简单,网上也有不少例子,不过大都有bug。下面是我修改得到的一个实现,效果还算不错,原理比较简单,就不废话了。

if  (m_bFullScreen)
{
    LockWindowUpdate(TRUE);

    ::SetParent(m_hWnd, m_OldWndParent);
    SetWindowPlacement(
& m_OldWndPlacement);

    ::SetForegroundWindow(m_OldWndParent);  
    ::SetFocus(m_OldWndParent);
    ::SetFocus(m_hWnd);

    LockWindowUpdate(FALSE);
}
else
{
    GetWindowPlacement(
& m_OldWndPlacement);
    
int  nScreenWidth  =  GetSystemMetrics(SM_CXSCREEN);
    
int  nScreenHeight  =  GetSystemMetrics(SM_CYSCREEN);

    m_OldWndParent 
=  ::GetParent(m_hWnd);
    ::SetParent(m_hWnd, GetDesktopWindow());

    WINDOWPLACEMENT wp1;
    ZeroMemory(
& wp1,  sizeof (WINDOWPLACEMENT));
    wp1.length 
=   sizeof (WINDOWPLACEMENT);
    wp1.showCmd 
=  SW_SHOWNORMAL;
    wp1.rcNormalPosition.left 
=   0 ;
    wp1.rcNormalPosition.top 
=   0 ;
    wp1.rcNormalPosition.right 
=  nScreenWidth;
    wp1.rcNormalPosition.bottom 
=  nScreenHeight;
    SetWindowPlacement(
& wp1);

    ::SetForegroundWindow(GetDesktopWindow());
    ::SetForegroundWindow(m_hWnd);
}

m_bFullScreen 
=   ! m_bFullScreen;

上面代码纠正了网上能找到的代码中一个比较明显的 焦点切换的问题,纯粹是我多次实验的结果,不要问我为什么这么写。

当然,这段代码也是有问题的,而且相当奇怪,在"ActiveX Control Test Container"中运行一切正常,但是一旦把这个控件嵌入的网页后,全屏,切回,改变IE窗口大小,再试图全屏就不会成功了,而是只有左上角有显示,结果比较诡异:



没有什么头绪,如果有人知道的话,赐教^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值