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

推荐订阅源

月光博客
月光博客
V
Visual Studio Blog
C
Check Point Blog
Google DeepMind News
Google DeepMind News
S
SegmentFault 最新的问题
博客园 - 聂微东
量子位
T
Tailwind CSS Blog
罗磊的独立博客
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
L
LangChain Blog
小众软件
小众软件
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Security Latest
Security Latest
M
MIT News - Artificial intelligence
Know Your Adversary
Know Your Adversary
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
爱范儿
爱范儿
T
The Exploit Database - CXSecurity.com
有赞技术团队
有赞技术团队
V
Vulnerabilities – Threatpost
Martin Fowler
Martin Fowler
A
Arctic Wolf
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
Cyberwarzone
Cyberwarzone
阮一峰的网络日志
阮一峰的网络日志
The Hacker News
The Hacker News
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
GbyAI
GbyAI
Latest news
Latest news
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
腾讯CDC
AWS News Blog
AWS News Blog
aimingoo的专栏
aimingoo的专栏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
Lohrmann on Cybersecurity
博客园 - Franky
S
Securelist
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threatpost
美团技术团队

博客园 - 游民一族

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窗口大小,再试图全屏就不会成功了,而是只有左上角有显示,结果比较诡异:

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