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

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

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

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

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

 

 

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

 

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

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

现在的需求:

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

错误思路:

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

 

正确思路步骤:

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

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

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

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

 

效果图:

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

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

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

核心代码:

 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 失传的第一本古老秘籍[多拓展显示器编程]

上一篇:局域网中linux和window互相访问共享文件夹的方法


下一篇:Darwin Streaming Server 6.0.3安装、订制、插件或模块