Windows扩展屏开发总结

本文来自网易云社区

 

作者:梁敏

一、多屏设置

 

  1. 在设置-系统-可以点击显示器1和2,可以进行单独设置;

  2. “使之成为我的主显示器”可以设置当前显示器是主屏;主屏的选择会决定整个虚拟屏幕坐标起点的位置。

  3. 多显示器可以设置扩展,复制和独立展示。(独立显示是只在显示屏1 或者2上显示)

 

    • 扩展  - 设计,办公等场景。对于应用的意义则在于我们可以在两个或多个显示器上,分别打开不同的窗口,比如在一个显示器上显示网页,另一个显示器上进行文档编辑,在多任务应用时会非常方便。

    • 复制  - 会议、教学、商业展示。也就是说多屏显示系统中的每个显示设备,所显示的内容都是一样的,这一特点使它适合用在商务以及教学场合,比如大学课堂上讲课时或在会议上进行演示等。 - 设置完成后,和扩展模式中各显示器可以设置成各自的最佳分辨率不同,复制模式只能根据较低得分辨率进行设置,类似水桶效应:多屏显示系统中最小分辨率的设备决定整个画面的分辨率。所以在复制模式下,如果两款显示设备的分辨率不一样,则具有较高分辨率的显示设备,画面的质量必然受到影响,这也是复制模式的一个局限。

    • 独立。

 

  1. 设置是否在多显示器上显示任务栏,如图:                

  • 是否在所有显示器上显示任务栏 

  • 所有任务栏

  • 主任务栏和打开了窗口的任务栏

  • 打开了窗口的任务栏

 

二、虚拟桌面坐标

  1.  主屏幕(Primary Screen)和扩展屏幕

    • 主显示屏的左上角决定了虚拟桌面的起始坐标(0,0)。其他显示器的显示区域的坐标由他和主显示屏的相对位置决定。

    • 扩展屏幕有多个。

  1. 虚拟屏幕(Virtual Screen)

    • 主屏和扩展屏组成的整个屏幕,就是虚拟屏幕。主屏和扩展屏,并非整齐排列,扩展屏可以放在主屏四周任何地方,但要相邻。

    • 虚拟桌面中的坐标是连续的,因此显示器2的坐标是主显示器1的显示区域的继续。例如如下显示器1分辨率1680x1050,显示器2分辨率1440x900,显示器2位于主显示器的正右方,则第二个显示区域的坐标是从(1680,0)到(3119,899)。                    

 

 如果设置显示器2是主屏,显示器2的坐标是(0,0)->(1439,899),显示器1的坐标(-1679,1049)

 

三、系统相关API

Microsoft为支持多显示器模式提供了一些新的API调用,下面具体介绍它们的功能:

    1.HMONITOR MonitorFromPoint(POINT pt,DWORD dwFlags)

MonitorFromPoint返回包含特定点(pt)的一个显示器句柄。如果pt不属于任何一个显示器,返回的显示器句柄由dwFlags标志决定:

MONITOR_DEFAULTTONULL时返回NULL;

MONITOR_DEFAULTTOPRIMARY时返回代表主显示器的HMONITOR句柄;

MONITOR_DEFAULTTONEAREST时返回最靠近pt点的显示器的HMONITOR句柄。

    2.HMONITOR MonitorFromRect(LPCRECT lprc,DWORD dwFlags)

MonitorFromRect返回包含lprc代表的矩形的显示器句柄;如果包含此矩形的显示区域不止一个,则返回包含矩形最大部分的显示器句柄;如果矩形不属于任何一个显示区域,返回的句柄由dwFlags决定,规则与MonitorFromPoint相同。 

    3. HMONITOR MonitorFromWindow(HWND hwnd,DWORD dwFlags)

与MonitorFromRect类似,但输入是一个代表窗口的句柄hwnd而不是指向矩形的指针。 

    4.BOOL GetMonitorInfo(HMONITOR hMonitor,LPMONITORINFO lpmi)

GetMonitorInfo返回由hMonitor代表的显示器的有关信息,这些信息存储在指向MONITORINFO结构的指针——lpmi中。这些信息包括用RECT结构表示的显示器的显示区域的大小(如果这个显示器不是主显示器,RECT的坐标可能为负数),以及用RECT结构表示的显示器的工作区域的大小,工作区域是显示区域中除去系统任务栏和应用程序快捷方式栏所剩下的区域,还能够判断此显示器是否为主显示器,并返回一个标志。 

  5.GetSystemMetrics

获取坐标的时候用VIRTUALSCREEN参数

GetSystemMetrics(SM_CXVIRTUALSCREEN);//虚拟桌面宽度

GetSystemMetrics(SM_CYVIRTUALSCREEN);//虚拟桌面高度

GetSystemMetrics(SM_XVIRTUALSCREEN );//虚拟桌面左上角X坐标

GetSystemMetrics(SM_YVIRTUALSCREEN );//虚拟桌面左上角Y坐标

特别注意的是,多显示器的时候,SM_XVIRTUALSCREEN和SM_YVIRTUALSCREEN是可以为负值的。所以多显示器处理时,边界不要以为是(0,0)->(cx,cy)。多显示器的坐标是以主屏幕的左上角为(0,0)。 使用SM_CXSCREEN,SM_CYSCREEN获取只是主屏大小。

 

四、GUI扩展屏开发

    GUI在多屏开发时主要问题是:当用户将主屏窗口移动到副屏后,需要记录窗口所处屏幕的信息。点击弹出菜单或者创建新窗口时,需要根据当前所处屏幕计算位置。

    已经在我们代码里做了如下处理,开发时注意:

  1. 在用Window::CenterWindow显示新建窗口,如果希望窗口显示在和某窗口A在同一个显示器时,且窗口A不是新建窗口的父窗口,需要把该窗口A的句柄传入。例如我们的主窗口mainwnd,从主窗口新建窗口和主窗口在同一个显示器时,window->CenterWindow(mainwnd->GetHWND())。第二个参数wndCenter,代表是否要以指定窗口的居中显示。如果已经设置了父窗口,不需要这么设置,对于父窗口的。在CenterWindow在计算位置时会根据传入的窗口句柄所在显示器计算位置。SingletonShow这里也扩展了参数,可以传入窗口句柄。

    void Window::CenterWindow(HWND hwndFrom, bool wndCenter/* = false*/)

  

eg:nim_ui::WindowsManager::SingletonShow<AboutForm>(AboutForm::kClassName, GetHWND());

  1. 在调用弹出的msgbox时,一定指定父窗口,这样弹出的msgbox就会和父窗口保持一致,不需其他处理。ShowMsgBox(m_hWnd, L"******", cb, L"", L"确定", L"");

  2. 在判断是否超出当前显示器边界的时候,这里要使用虚拟桌面的坐标来进行判断。

 

网易云大礼包:https://www.163yun.com/gift

本文来自网易云社区,经作者梁敏授权发布

 

 

相关文章:
【推荐】 SpringBoot入门(五)——自定义配置
【推荐】 多大规模的数据才值得用大数据的方式来处理?
【推荐】 Android 模拟器 下载、编译及调试

转载于:https://www.cnblogs.com/163yun/p/9583512.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Windows服务器是指安装了Windows操作系统的服务器设备。而WebRTC是一种实时通信技术,可以在浏览器之间直接进行音视频通话或者数据传输。 对于Windows服务器来说,如果想要支持WebRTC技术,需要满足一些条件。首先,服务器上需要安装支持WebRTC的浏览器,比如最新版本的谷歌Chrome浏览器。其次,服务器上需要运行相应的WebRTC服务器软件,以提供WebRTC的服务接口和功能。 在Windows服务器上,可以选择使用一些开源的WebRTC服务器软件,比如Kurento、janus或者mediasoup等。这些服务器软件可以部署在Windows服务器上,并提供WebRTC的相关功能,比如音视频通话、幕共享、文件传输等。 另外,在Windows服务器上运行WebRTC服务器软件时,还需要注意开放相应的端口,以便外部用户可以通过浏览器访问服务器上的WebRTC服务。通常,WebRTC使用的端口包括UDP的3478和TCP的443等。 总结来说,Windows服务器可以支持WebRTC技术,但需要安装支持WebRTC的浏览器,并在服务器上部署相应的WebRTC服务器软件。只有满足这些条件,才能在Windows服务器上实现WebRTC的实时通信功能。 ### 回答2: WebRTC是一种开放的实时通信协议,用于浏览器之间的音频、视频和数据传输。虽然WebRTC最初是为Web浏览器设计的,但它也可以在Windows服务器上运行。 在Windows服务器上部署和使用WebRTC通常需要以下步骤: 1. 安装WebRTC服务器:为了在Windows服务器上使用WebRTC,您需要安装一个支持WebRTC的服务器。常见的WebRTC服务器包括OpenWebRTC和Kurento Media Server。您可以根据自己的需求选择合适的服务器。 2. 配置服务器:一旦安装了WebRTC服务器,您需要配置服务器以与Windows操作系统和网络环境集成。这可能涉及到一些网络设置和服务器参数的配置。 3. 编写应用程序:在Windows服务器上部署WebRTC后,您可以使用其提供的API和工具开发自己的WebRTC应用程序。这些应用程序可以是音视频通话、实时聊天、文件共享等。 4. 测试和部署:在完成开发后,您需要对您的WebRTC应用程序进行测试,确保它能在Windows服务器上正常运行。一旦测试通过,您可以将应用程序部署到Windows服务器,使其能够提供服务。 总而言之,WebRTC可以在Windows服务器上使用,但需要安装和配置一个支持WebRTC的服务器,并按照开发和部署流程进行操作。通过这些步骤,您可以将WebRTC集成到Windows服务器中,从而实现实时通信和数据传输的功能。 ### 回答3: Windows服务器提供了WebRTC的支持,使得开发者可以在Windows环境中进行WebRTC应用程序的开发和部署。 WebRTC是一种开放的实时通信标准,允许实现实时音频、视频和数据传输的浏览器之间进行通信。它提供了一套API和协议,使得开发者可以轻松地在Web应用中实现视频会议、音视频通话和文件共享等功能。 在Windows服务器上使用WebRTC,开发者可以使用各种编程语言和框架进行开发,包括C#、ASP.NET、Node.js等。Windows服务器提供了丰富的开发工具和环境,使得开发者可以方便地构建和部署WebRTC应用程序。 除了开发环境,Windows服务器还提供了强大的网络功能和安全特性,可以保证WebRTC应用程序的运行稳定性和安全性。Windows服务器支持网络传输协议的优化和加密,保证实时音视频传输的质量和安全。 此外,Windows服务器还提供了丰富的管理工具和监控功能,可以方便地管理和监控WebRTC应用程序的运行状态和性能。开发者可以使用这些工具进行故障排除、性能优化和容量规划等工作,确保WebRTC应用程序的高可用性和可扩展性。 总之,Windows服务器为开发者提供了强大的开发、部署和管理工具,使得他们可以在Windows环境中轻松地开发和部署WebRTC应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值