EasyPlayerPro-win配置全屏模式不能全屏是为什么

最近遇到一个项目团队是做全景视频播放的,希望用EasyPlayerPro做一个客户端程序,但是在调试DEMO的时候遇到一个问题,即配置了全屏模式后,视频只能出现在窗体左上角。

EasyPlayerPro播放界面:

 

针对该问题,我们与这个项目团队进行了详细沟通,才得知当前的显示器是多屏拼接显示的,用Nvidia的Surround配置多个显示器拼接成一个显示器来用,目的是提高显示效果。但是就算如此,也不应该在本应全屏的时候不能全屏显示,最终只能回归到检查代码。

在检查到代码FullScreen()时,忽然看到了如下代码:

ShowWindow(SW_MAXIMIZE);

这个代码透露了一定的信息,让我们开始思考当前指定窗口最大化是否不能对多屏显示起作用,或者只是对当前第一块屏幕有效?于是我们开始实验,去除最大化操作,这时候程序正好出现在屏幕中间,通过拖拽的方式可以拉到铺满整个屏幕的最大化效果,于是又检查了下当前屏幕分辨率,分辨率为:7688*4328。

既然通过拖拽的方式可以实现最大化的需求,我们是否可以换个思路,直接将窗口指定分辨率,于是做如下试验:

SetWindowPos(NULL, 0, 0, 7688, 4328, 0)

从左上角开始绘制窗体的时候就指定好窗体的宽和高,然后再配合去除窗体边框等,调试运行后,过然可以解决问题,此时能果断解决网友遇到的“全屏”问题。

关键代码如下:

// 去掉标题栏  
ModifyStyle(WS_CAPTION, 0); //(WS_POPUP | WS_BORDER | WS_CAPTION | WS_SYSMENU, WS_CHILD);
// 去掉边框
ModifyStyleEx(WS_EX_DLGMODALFRAME, 0);  
//窗口位置和大小保持原来不变
SetWindowPos(NULL, 0, 0, 7688, 4328, 0);//SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED); 
//SetWindowPos(NULL, 0, 0, 1920, 1080, 0);//SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED); 
//最大化窗口
ShowWindow(SW_NORMAL); 
//ShowWindow(SW_MAXIMIZE);//不能再使用最大化,此最大化只是针对当前屏幕最大化

拓展

EasyPlayerPro虽然支持了几乎所有的流媒体协议,但是在很多场景和需求下面(例如:SDK包大小,自定义协议,数据加密),EasyPlayerPro的定制成本比较高,灵活程度没有EasyPlayer-RTSP和EasyPlayer-RTMP专用播放器的灵活程度高,EasyPlayerPro考虑的是通用性,而专用播放器考虑的是定制性。因此如果还想了解TSINGSEE青犀视频开发的其他专用播放器,欢迎联系我们,目前EasyPlayer系列已经支持H265编码的视频播放,同时支持集成,欢迎了解。

 
原文地址:https://www.cnblogs.com/TSINGSEE/p/14943746.html