首页 > 编程语言 >Winform C#多显示器窗口控制详解

Winform C#多显示器窗口控制详解

时间:2024-08-17 11:38:58浏览次数:9  
标签:WorkingArea 设定 窗口 AllScreens C# Screen 显示器 详解 Winform

写Winform程序的时候,有将一个窗口放置到特定的显示器,并且全屏的需求。于是借此机会,好好研究了一番这个Screen类[1],总结了一些方法。

Windows的窗口逻辑

首先我们需要知道窗口定位的逻辑。以2个窗口为例,下面的图片展示了显示器和坐标的对应关系。注意,使用深色模式可能看不清,可以点击上方的切换按钮切换为浅色。

显示器与坐标对应

可以看到,连接多个显示器后,每个显示器的每个点都有一个唯一的坐标。我们要做的,就是把Form的坐标设置到显示器上面去。

获取显示器列表

首先确保引用了using System.Windows.Forms;,这样才有Screen类可以用。

文档指出,可以用Screen.AllScreens获取所有显示器的数组。那么这个里面有什么呢?我们来看看文档是怎么说的:

Property Value
Screen[]
An array of type Screen, containing all displays on the system.

也就是说,返回的数组是个Screen数组。数组里面每一个元素都是个Screen对象,分别对应用户的每个显示设备。因此,我们可以通过这些对象来访问每个显示器。比如:

Screen scr1=Screen.AllScreens[0] //获取第1个显示器
Screen scr2=Screen.AllScreens[1]//第二个显示器

设置窗口位置

为了设定窗口位置,我们需要知道一个显示器左上角对应的坐标,这样才可以把窗口放进去。

比如,以下代码可以设置Form位置为第2个显示器的左上角,然后设置窗口覆盖全屏幕(包括任务栏:

Location = Screen.AllScreens[1].Bounds.Location;//设定目标坐标,结合上面的图片,这里是(1920,28)
Width = Screen.AllScreens[1].Bounds.Width;//设定窗口的宽度
Height = Screen.AllScreens[1].Bounds.Height;//设定窗口高度

但大部分情况下,我们只需要覆盖任务栏之上的部分,因此稍作修改:

Location = Screen.AllScreens[1].WorkingArea.Location;//设定目标显示器
Width = Screen.AllScreens[1].WorkingArea.Width;//设定窗口的宽度
Height = Screen.AllScreens[1].WorkingArea.Height;//设定窗口高度

注意到了吗?这里我们用的是WorkingArea来获取长宽高,以及位置。WorkingArea不包括任务栏,所以高度较少,这两种需要看情况使用。

参考资料

[1] System.Windows.Forms.Screen

标签:WorkingArea,设定,窗口,AllScreens,C#,Screen,显示器,详解,Winform
From: https://www.cnblogs.com/samhou/p/18364170

相关文章

  • CF704E Iron Man 题解
    Description“铁人”yyb在玩游戏。在一个\(n\)个点的树上,yyb放置了\(m\)个鸡贼。每个鸡贼有四个整数参数\(t_i,c_i,v_i,u_i\),表示这个鸡贼会在\(t_i\)时刻出现在点\(v_i\),并以每时刻\(c_i\)条边的速度向\(u_i\)点匀速移动,到达\(u_i\)点时立刻消失。如果一个时刻......
  • 在线三维CAD中如何实现二维CAD图转三维
    一、前言网页CAD中经常有这样的需求:将二维的CAD图纸通过转换为三维的形状(如将平面二维的图形向上拉伸一定的高度),进而进行三维展示的效果,本文以将平面二维的图形向上拉伸一定的高度为例,实现二维CAD图形转三维图形。二、mxcad和mxcad3dmxcad是一个功能丰富、简易高效的二维CAD开......
  • C++多维数组与指针
    定义inta[3][4]={{1,3,5,7},{9,11,13,15},{17,18,21,23}};a代表二维数组首元素的地址,现在的首元素不是一个整型变量,而是由4个整型元素所组成的一维数组,因此a代表的是首行的起始地址,a+1代表第二行首地址。a代表的是首行的起始地址,即a[0]行的首地址,&a[0]a+1代表第二行首......
  • 生鲜商城购物系统解决方案毕设毕业设计.web期末作业设计网页.css网页成品参考
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • 如何让你的C语言程序打印的log多一点色彩?(超级实用)
    接着上一篇文章《由字节对齐引发的一场“血案“》在平常的调试中,printf字体格式与颜色都是默认一致的。如果可以根据log信息的重要程度,配以不同的颜色与格式,可以很方便的查找到要点。1、printf字体显示语法说明printf(“\033[显示方式;字体颜色;背景颜色m字符串\033[0m”)......
  • 让你的C程序,可以自动更新版本信息
    一、软件管理稍微上点规模的软件开发往往周期都非常长,中间会产生很多临时版本,这些临时版本往往会有各种各样的bug,由于项目参与的人员众多、水平参差不齐,软件分支众多、功能复杂,经常会有各种稀奇古怪的事情发生,经常遇到一个问题就是:某个测试版本测出了问题,但是研发却发现......
  • EFCore中自引用的实体类设计
    案例:以部门(为主)-----部门下面又分1部、2部、3部等,1部下面又分为1组,2组,3组等这种结构像这样的设计类型应该用自引用来设计下面用用代码来实现://////Departmentclass///publicclassDepartment{//////部门Id///publicintId{get;set;}//////部门名称Nam......
  • Linux c程序中获取shell脚本输出(如获取system命令输出)
    在工作中遇到一个小问题,就是想获取函数system()执行之后打印的字符串信息。这个功能还是很实用的,能为我们节省很多开发时间,特地整理了一下相关知识点分享给大家。1.使用临时文件1.1使用shell的重定向首先想到的方法就是将命令输出重定向到一个临时文件,在我们的应用程序中读......
  • 新员工一口气写完了这些C语言例子,领导给他转正了!
    持续更新中...很多想从事嵌入式Linux开发的老铁问一口君,有没有快速提升自己编程水平的小例子?一口君根据自己多年工作经验,整理了一些基于Linux的c语言的非常实用的小例子,这些例子在嵌入式开发工作中,或多或少都会用到。看看你们会做多少?一、基础C语言1.排序算法给指定数组排......
  • arc114
    arc一场比一场难噢噢噢噢a:容易想到对每个数进行质因数分解,然后只要每个数都和y有一个相同的质数即可,这个状压一下就可以了b:首先每个数的出度都是1,所以一个连通块里只有一个环,所以是2^t-1c:挺神仙的。这种题首先要分析函数的性质,发现操作+1的情况是对于每个a_{i}lst==0||l......