c#Winform开发分屏显⽰应⽤程序
分屏显⽰即可把⼀台主机内运⾏的多个程序分别显⽰在不同的两个(或多个)屏幕上。⽬前市⾯上主流的显卡都⽀持分屏显⽰(显⽰双屏幕),如果需要显⽰2个以上的屏幕,则应使⽤“拖机卡”类的硬件。
设置分屏显⽰的两种⽅法如下:
1、⽤两个显卡连接两台显⽰器,进⼊系统后,分清楚哪⼀个是主显卡,在桌⾯空⽩处右键单击,点属性,然后在窗⼝中点“设置”选项卡,会看到有两个显⽰,分别是1(主显卡)和2(副显卡),点击那个2,在下⾯的“将windows桌⾯扩展到该监视器”打上对号,确定后,你试着把⿏标往主显⽰器右边界移动,再移动,⿏标会跑到第⼆台显⽰器上去了,这样,同样运⾏⼏个程序,分别将它们的窗⼝拖拽到两个显⽰器的区域中就可以了,这实际上是将桌⾯扩展了⼀下。
2、使⽤专门的硬件。可以使⽤“⼀拖多”的拖机卡,只要将设备插⼊usb⼝中,将设备上引出的两个ps/2⼝分别接⿏标和键盘,主机中还是有两块显卡,然后再装上这个设备的专⽤软件,重启后,经过简单的配置,即可实现“完全”独⽴的两个系统。
所谓的分屏或多屏软件,就是把软件中的多个窗体,在主屏幕运⾏,但是把各个窗体(坐标)移动到各个扩展屏幕位置上如下图所⽰:
主屏幕(MainForm)index=0扩展屏幕1 (Form1) index=1
扩展屏幕2 (Form2) index=...扩展屏幕3 (Form3) index=...
以下介绍最常⽤的双屏幕显⽰,也就是左右模式的屏幕显⽰的⽅法。
WinForm 的实现办法:
利⽤WinForm中的类,即可⽐较⽅便地实现多窗体分别在多个屏幕上显⽰。
获取当前系统连接的屏幕数量: 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);
把任何窗体显⽰在任何屏幕的⽅法:
[csharp]
1. //在窗体的OnLoad事件中调⽤该⽅法
2. protected void Form1_OnLoad(...) {
3. showOnMonitor(1);//index=1
4. }
5.
6. private void showOnMonitor(int showOnMonitor)
7. {
8. Screen[] sc;
9. sc = Screen.AllScreens;
10. if (showOnMonitor >= sc.Length) {
11. showOnMonitor = 0;
12. }
13.
14.
15. this.StartPosition = FormStartPosition.Manual;
16. this.Location = new Point(sc[showOnMonitor].Bounds.Left, sc[showOnMonitor].Bounds.Top);
17. // If you intend the form to be maximized, change it to normal then maximized.
18. this.WindowState = FormWindowState.Normal;
19. this.WindowState = FormWindowState.Maximized;
20. }
对WPF窗体来说,只要简单的更改即可:
⾸先要添加对 System.Windows.Forms 和 System.Drawing 的引⽤
简单的参考代码如下:
电脑显示器分屏[csharp]
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. }
注意:⼀定应该在窗体加载前,判断所要显⽰的屏幕是否存在,否则会报错!
转⾃:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论