惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
爱范儿
爱范儿
The Cloudflare Blog
Y
Y Combinator Blog
B
Blog RSS Feed
Stack Overflow Blog
Stack Overflow Blog
博客园 - 叶小钗
G
Google Developers Blog
J
Java Code Geeks
P
Proofpoint News Feed
美团技术团队
Engineering at Meta
Engineering at Meta
腾讯CDC
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
WordPress大学
WordPress大学
博客园 - 聂微东
雷峰网
雷峰网
有赞技术团队
有赞技术团队
L
LangChain Blog
N
Netflix TechBlog - Medium
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 【当耐特】

博客园 - 游民一族

VR发展的最大障碍在于内容? 无法修改Form尺寸的解决方法 近期业余生活以及计划(持续更新) 远程控制之屏幕截取 小结 [C#]mouse_event模拟点击时坐标参数无效?! Javascript: IE中命名函数直接量的Bug? - 游民一族 - 博客园 ASP.NET AJAX Client Library: 更繁?更简? ASP.NET动态创建控件之绝境求生 喜讯,公司换宽屏液晶显示器了 分享:基于UDP协议实现可靠的数据传输 C#线程:只要任何一个线程在运行,程序就不退出?! 基于Web的仿WF工作流设计器 [ASP.NET]ASP.NET 2.0中Membership的UserID问题 [ASP.NET AJAX]谨记给UpdatePanel中动态添加的控件赋ID VS 2005 BUG: 新增JScript文件编码问题引起乱码? [ASP.NET]如何灵活定制皮肤/页面:布局设计器介绍 过滤ASP.NET输出HTML中的无用空格 在JavaScript中实现命名空间 [C#]NHibernate处理多帐套问题
[ATL/ActiveX]全屏显示ActiveX控件
游民一族 · 2007-10-16 · via 博客园 - 游民一族

现在很多视频共享网站如土豆等都使用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窗口大小,再试图全屏就不会成功了,而是只有左上角有显示,结果比较诡异:

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