原文:C#& Screen 类&(&多&屏&幕&开&发)

Screen 类

下面的代码示例演示如何使用 Screen 类的各种方法和属性。 该示例调用 AllScreens 属性来检索连接到系统的所有屏幕的数组。 对于每个返回的 Screen,该示例将设备名称、边界、类型、工作区和主屏幕添加到
ListBox

 1 private void button1_Click(object sender, System.EventArgs e)
2 {
3 int index;
4 int upperBound;
5
6 // Gets an array of all the screens connected to the system.
7
8
9 Screen [] screens = Screen.AllScreens;
10 upperBound = screens.GetUpperBound(0);
11
12 for(index = 0; index <= upperBound; index++)
13 {
14
15 // For each screen, add the screen properties to a list box.
16
17
18 listBox1.Items.Add("Device Name: " + screens[index].DeviceName);
19 listBox1.Items.Add("Bounds: " + screens[index].Bounds.ToString());
20 listBox1.Items.Add("Type: " + screens[index].GetType().ToString());
21 listBox1.Items.Add("Working Area: " + screens[index].WorkingArea.ToString());
22 listBox1.Items.Add("Primary Screen: " + screens[index].Primary.ToString());
23
24 }
25
26 }

所谓的分屏或多屏软件,就是把软件中的多个窗体,在主屏幕运行,但是把各个窗体(坐标)移动到各个扩展屏幕位置上如下图所示:

 

主屏幕

(MainForm)

index=0
扩展屏幕1

(Form1)

index=1
扩展屏幕2

(Form2)

index=...
扩展屏幕3

(Form3)

index=...

 

 

以下介绍最常用的双屏幕显示,也就是左右模式的屏幕显示的方法。

WinForm 的实现办法:

利用WinForm中的Screen类,即可比较方便地实现多窗体分别在多个屏幕上显示。

 

  • 获取当前系统连接的屏幕数量: Screen.AllScreens.Count();
  • 获取当前屏幕的名称:string CurrentScreenName = Screen.FromControl(this).DeviceName;
  • 获取当前屏幕对象:Screen CurrentScreen = Screen.FromControl(this);
  • 获取当前鼠标所在的屏幕:Screen CurrentScreen = Screen.FromPoint(new Point(Cursor.Position.X, Cursor.Position.Y));
  • 让窗体在第2个屏幕上显示:
     this.Left = ((Screen.AllScreens[1].Bounds.Width - this.Width) / 2);

     this.Top = ((Screen.AllScreens[1].Bounds.Height - this.Height) / 2);
把任何窗体显示在任何屏幕的方法:
Winform:
1 Screen[] sc;
2 sc = Screen.AllScreens;
3 this.StartPosition = FormStartPosition.Manual;
4 this.Location = new Point(sc[1].Bounds.Left, sc[1].Bounds.Top);
5 // If you intend the form to be maximized, change it to normal then maximized.
6 this.WindowState = FormWindowState.Normal;
7 this.WindowState = FormWindowState.Maximized;
8 MessageBox.Show(this.Handle.ToString());

WPF:

 1 protected override void OnStartup(StartupEventArgs e)
2 {
3 base.OnStartup(e);
4
5 Window1 w1 = new Window1();
6 Window2 w2 = new Window2();
7
8
9 Screen s1 = Screen.AllScreens[0];
10 Screen s2 = Screen.AllScreens[1];
11
12 Rectangle r1 = s1.WorkingArea;
13 Rectangle r2 = s2.WorkingArea;
14
15 w1.Top = r1.Top;
16 w1.Left = r1.Left;
17
18 w2.Top = r2.Top;
19 w2.Left = r2.Left;
20
21 w1.Show();
22 w2.Show();
23
24 w2.Owner = w1;
25
26
27 }

C#& Screen 类&(&多&屏&幕&开&发)的更多相关文章

  1. ​0​天​掌​握​i​O​S​开​发​之​D​a​y​2​ ​-​ ​内​存​管​理 (给学生讲解的课件,总结的不错)

    from:   10​天​掌​握​i​O​S​开​发​之​D​a​y​2​ ​-​ ​内​存​管​理

  2. [爬坑日记] 安卓模拟器1903蓝屏 没开hyper-v

    先说解决方案: 我在升级完1903之后短短几个小时蓝屏了两次 还是不同原因,不由得开始怀疑这个版本的稳定性,随后发现只有启动安卓模拟器的时候必然蓝屏(还有一次蓝屏实在安装驱动的时候) 经过百度得知需要 ...

  3. unity3D 锁屏再开程序崩溃

    在Uniyt3d 调用Android Plugin 的时候,会出现锁屏后再开,程序就崩溃的的现象,解决办法就是在 AndroidManifest.xml 加入  android:configChang ...

  4. 【android 开 发 】 - Android studio 下 NDK Jni 开发 简单例子

    Android 开发了一段时间,一方面 ,感觉不留下点什么.有点对不起自己, 另一方面,好记性不如烂笔头,为了往后可以回头来看看,就当做是笔记,便决定开始写博客.废话不多说 ! 今天想搞一搞 ndk ...

  5. P​D​F​二​次​开​发​_​i​S​t​y​l​e​P​D​F​表​单​域​的​填​充

    wo讲到PDF表单,我们首先需要认识Adobe定义的PDF表单有哪些.以下是我从网上搜索到的简单介绍: PDF 表单简介 PDF 是可移植文档格式(Portable Document Format)的 ...

  6. am335x 无屏实现开关机程序

    因测试需要加入开机次数记录,所以记录一下7816开关机是怎么做的 原理很简单,开机时判断一个记录文件是否存在,如果存在,运行一段代码,将记录开机次数文件的值读出来+1 代码如下: #include & ...

  7. 如​何​使​用​P​H​P​开​发​高​效​的​W​E​B​系​统

    PHP是一个非常优秀的工具,它能够简单,也能够复杂.不一样的项目,应该用不一样的PHP.  小项目 - 简单而直接的PHP 一般对于一个功能页面在20下面的站点.我们能够用一个非常easy的框架结构来 ...

  8. Skeleton Screen -- 骨架屏--应用

    案例:使用 现已经在支付的项目使用 用户体验一直是前端开发需要考虑的重要部分,在数据请求时常见到锁屏的loading动画,而现在越来越多的产品倾向于使用Skeleton Screen Loading( ...

  9. Skeleton Screen — 骨架屏

    用户体验一直是前端开发需要考虑的重要部分,在数据请求时常见到锁屏的loading动画,而现在越来越多的产品倾向于使用Skeleton Screen Loading(骨架屏)替代,以优化用户体验. Sk ...

随机推荐

  1. 6. Python运算符之算术、比较、赋值运算符

    什么是运算符?举个简单的例子 4 +1 = 5 . 例子中,4 和 1 被称为操作数,"+" 和"="称为运算符. 工作中用到的运算符主要有以下几种:算术运算符 ...

  2. 错误 1 error C4996: 'getcwd': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getcwd. See online help for details.

    解决办法: 属性>C/C++>预处理定义>编辑>添加_CRT_NONSTDC_NO_DEPRECATE>应用

  3. 关于scroll实现侧边导航栏

    需求为一个简单的scroll效果,侧边选项卡跟随屏幕向下拖动变颜色的.点击侧边选项卡,跳转到相应模块. 索性上网找了一下类似的效果.附带源码地址  https://blog.csdn.net/drea ...

  4. Excel_VBA 常用代码

    单元格编辑后改变背景色(6号,355832828) Dim oldvalue As Variant Private Sub Worksheet_Change(ByVal Target As Range ...

  5. Android的WebView通过JS调用java代码

    做项目时候会遇到我们用WebView 打开一个web,希望这个web可以调用自己的一些方法,比如我们在进一个web页面,然后当我们点击web上的某个按钮时,希望能判断当前手机端是否已经登录,如果未登录 ...

  6. python生成阿里云云直播推流播流地址

    申请一个阿里云账号,进入控制台,添加云直播工能,就可以获得相关数据, 直接上代码,阿里云接口文档https://cloud.tencent.com/document/product/267/7977 ...

  7. IDEA2017.3.1破解激活

    idea激活有多种方式,网上较多的是使用注册码或者填License server网址,目前(2017年8月19日)使用注册码的方式,亲测可用的只有lanyun提供的注册码,但是会在2017年11月份的 ...

  8. Mysql ibd恢复

    一,binlog恢复,这里就不说了. 二,ibd方式其实很简单, 生成数据结构(有的可以跳过) 1,创建一个新库 2,新库里新建一个表,名字和回复的表一样. 字段数量一样(字段类型和名字都无所谓) 3 ...

  9. 关于scroll、client、offset和style中的height、width、top以及bottom属性

    内容和图片来自offset.scroll.client三大家族, 此处仅作记录使用 client offset scroll

  10. springcloud -zuul(2-执行流程及源码)

    官方图 1.Servlet zuul.servletPath默认配置为/zuul,故请求为/zuul开头的会跳过dispatcherServlet直接进入ZuulServlet,该配置可以自定义配置, ...