zoukankan      html  css  js  c++  java
  • 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类,即可比较方便地实现多窗体分别在多个屏幕上显示。

    • 获取当前系统连接的屏幕数量: 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] view plaincopy
    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] view plaincopy
    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.         }  


     
    注意:一定应该在窗体加载前,判断所要显示的屏幕是否存在,否则会报错!
  • 相关阅读:
    jquery实现选项卡(两句即可实现)
    常用特效积累
    jquery学习笔记
    idong常用js总结
    织梦添加幻灯片的方法
    LeetCode "Copy List with Random Pointer"
    LeetCode "Remove Nth Node From End of List"
    LeetCode "Sqrt(x)"
    LeetCode "Construct Binary Tree from Inorder and Postorder Traversal"
    LeetCode "Construct Binary Tree from Preorder and Inorder Traversal"
  • 原文地址:https://www.cnblogs.com/lizi/p/2361229.html
Copyright © 2011-2022 走看看