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 plain copy
  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 plain copy
  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.         }  


 
注意:一定應該在窗體加載前,判斷所要顯示的屏幕是否存在,否則會報錯!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM