天天看點

c# Winform 開發分屏顯示應用程式

分屏顯示即可把一台主機内運作的多個程式分别顯示在不同的兩個(或多個)螢幕上。目前市面上主流的顯示卡都支援分屏顯示(顯示雙螢幕),如果需要顯示2個以上的螢幕,則應使用“拖機卡”類的硬體。

設定分屏顯示的兩種方法如下:

1、用兩個顯示卡連接配接兩台顯示器,進入系統後,厘清楚哪一個是主顯示卡,在桌面空白處右鍵單擊,點屬性,然後在視窗中點“設定”頁籤,會看到有兩個顯 示,分别是1(主顯示卡)和2(副顯示卡),點選那個2,在下面的“将windows桌面擴充到該螢幕”打上對号,确定後,你試着把滑鼠往主顯示器右邊界移 動,再移動,滑鼠會跑到第二台顯示器上去了,這樣,同樣運作幾個程式,分别将它們的視窗拖拽到兩個顯示器的區域中就可以了,這實際上是将桌面擴充了一下。

2、使用專門的硬體。可以使用“一拖多”的拖機卡,隻要将裝置插入usb口中,将裝置上引出的兩個ps/2口分别接滑鼠和鍵盤,主機中還是有兩塊顯示卡,然後再裝上這個裝置的專用軟體,重新開機後,經過簡單的配置,即可實作“完全”獨立的兩個系統。

所謂的分屏或多屏軟體,就是把軟體中的多個窗體,在主螢幕運作,但是把各個窗體(坐标)移動到各個擴充螢幕位置上如下圖所示:

主螢幕

(MainForm)

index=0

擴充螢幕1

(Form1)

index=1

擴充螢幕2

(Form2)

index=...

擴充螢幕3

(Form3)

以下介紹最常用的雙螢幕顯示,也就是左右模式的螢幕顯示的方法。

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);

把任何窗體顯示在任何螢幕的方法:

//在窗體的OnLoad事件中調用該方法  

protected void Form1_OnLoad(...) {  

    showOnMonitor(1);//index=1  

}  

private void showOnMonitor(int showOnMonitor)   

{   

    Screen[] sc;   

    sc = Screen.AllScreens;   

    if (showOnMonitor >= sc.Length) {  

        showOnMonitor = 0;  

    }  

    this.StartPosition = FormStartPosition.Manual;   

    this.Location = new Point(sc[showOnMonitor].Bounds.Left, sc[showOnMonitor].Bounds.Top);  

    // If you intend the form to be maximized, change it to normal then maximized.  

    this.WindowState = FormWindowState.Normal;  

    this.WindowState = FormWindowState.Maximized;  

對WPF窗體來說,隻要簡單的更改即可:

首先要添加對 System.Windows.Forms 和 System.Drawing 的引用

簡單的參考代碼如下:

protected override void OnStartup(StartupEventArgs e)  

        {  

            base.OnStartup(e);  

            Window1 w1 = new Window1();  

            Window2 w2 = new Window2();  

            Screen s1 = Screen.AllScreens[0];  

            Screen s2 = Screen.AllScreens[1];  

            Rectangle r1 = s1.WorkingArea;  

            Rectangle r2 = s2.WorkingArea;  

            w1.Top = r1.Top;  

            w1.Left = r1.Left;  

            w2.Top = r2.Top;  

            w2.Left = r2.Left;  

            w1.Show();  

            w2.Show();  

            w2.Owner = w1;  

        }  

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

繼續閱讀