世界上只有想不通的人,没有走不通的路 --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==========