首页 > 代码库 > [Aaronyang] 写给自己的WPF4.5 失传的第一本古老秘籍[多拓展显示器编程]

[Aaronyang] 写给自己的WPF4.5 失传的第一本古老秘籍[多拓展显示器编程]

 世界上只有想不通的人,没有走不通的路 --Aaronyang的博客(www.ayjs.net)-www.8mi.me

=============时隔两年后再看WPF,有些秘籍不太适合公开,公开了就不值钱了,尽量吧==========

各位伟大的网站请你们不要转载,博客园有权追究法律责任,请尊重别人的劳动成果,谢谢了。各位阅读朋友,请到我的博客园官网查看我的博客,不要到别人的网站上看

============================================================

 

 

需求:比如A主机,打开4个窗体,外面接了3个显示器,点击程序的按钮,直接其他3个窗体,分别最大化显示在其他的显示器上

 

大致错误印象,但是可以学习原理:

技术分享

现在的需求:

技术分享

错误思路:

获得显示器对象,然后在这个显示器里面show,哎~AaronYang告诉你,这可是一个不归路!

 

正确思路步骤:

1. 你只要理解 所有的屏幕拓展后,会是一个大屏幕,每个屏幕都是一个对象,根据这个对象就可以拿到 每个显示器的信息

2. 每个拓展的显示器都有WorkArea区域

3. 让window的show时候的位置等于显示器的位置即可

4. 关闭所有屏幕投影的显示器,只需要临时记住window,然后循环Close一下即可

 

效果图:

技术分享

3个窗体,一个主屏幕的窗体,用于操作

技术分享

核心代码:

 Screen[] screens = Screen.AllScreens;            if (screens.Length == 1)            {                lblmsg.Content = "已经投射1个显示器";            }            else if (screens.Length == 2)            {                lblmsg.Content = "已经投射2个显示器";            }            else if (screens.Length == 4)            {                lblmsg.Content = "已经投射4个显示器";            }            else {                lblmsg.Content = "目前仅支持1,2,4个显示器模式";            }            //主屏幕显示            Screen mainScreen = screens.FirstOrDefault(x=>x.Primary==true);            //主屏幕显示window1            Window1 win1 = new Window1();            win1.WindowState = WindowState.Maximized;            win1.WindowStartupLocation = WindowStartupLocation.Manual;            System.Drawing.Rectangle mswa = mainScreen.WorkingArea;            win1.Left = mswa.Left;            win1.Top = mswa.Top;            win1.Width = mswa.Width;            win1.Height = mswa.Height;            openWindows.Add(win1);            win1.Show();            //其他屏幕显示,这里假设有2个            var subScreen = (from o in screens where o.Primary == false select o).ToList<Screen>();            if (subScreen.Count > 0) {                var subscreen1 = subScreen[0];                Window2 win2 = new Window2();                win1.WindowState = WindowState.Maximized;                win1.WindowStartupLocation = WindowStartupLocation.Manual;                System.Drawing.Rectangle mswa2 = subscreen1.WorkingArea;                win2.Left = mswa2.Left;                win2.Top = mswa2.Top;                win2.Width = mswa2.Width;                win2.Height = mswa2.Height;                openWindows.Add(win2);                win2.Show();            }           

Demo下载:地址:http://pan.baidu.com/s/1gdrJUSF    密钥:q9r0

使用案例:肯德基收银系统,一面给客户看,一面给收银员看。餐饮收费系统,网吧系统等

 

各位伟大的网站请你们不要转载,博客园有权追究法律责任,请尊重别人的劳动成果,谢谢了

======安徽六安=========www.ayjs.net==========aaronyang========杨洋========www.8mi.me==========

 

[Aaronyang] 写给自己的WPF4.5 失传的第一本古老秘籍[多拓展显示器编程]