前言

这里所说的针对Winform、WPF 都适用。开机自启动对于控制台的也可以。

还是从项目实践中得来的,在这里记录下来。

对于自适应、分屏显示,在以前感觉应该比较高大上的问题,会比较难。在经过这次的实践感觉挺简单的。不过其中还是有一点要根据实际的业务有一些复杂。

一、自适应分辨率

在屏幕的分辨率改变的时候,改变窗口的大小为当前的分辨率,进行适应。这里是要在 “Window_SizeChanged” 事件里面处理。

具体代码:

        private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
this.WindowState = WindowState.Normal;
this.WindowStyle = WindowStyle.None;
this.ResizeMode = ResizeMode.NoResize;
if (screenIndex == )
{
this.Left = ;
this.Top = ;
Width = Screen.AllScreens[].Bounds.Width;
Height = Screen.AllScreens[].Bounds.Height;
}
else
{
int leftPix = ;
for (int i = screenIndex - ; i >= ; i--)
{
leftPix += Screen.AllScreens[i].Bounds.Width;
}
this.Left = leftPix;
this.Top = ;
Width = Screen.AllScreens[screenIndex].Bounds.Width;
Height = Screen.AllScreens[screenIndex].Bounds.Height;
}
}

这个代码里面有分屏显示的一部分。

二、分屏显示

项目中需要一台主机输出到多个屏幕,在对应屏幕显示窗口。

在这里要注意,屏幕的排列顺序。这个顺序是“显示”设置界面设置的顺序,不是物理的顺序

例如:对于两个屏幕,物理上可以一个在上一个在下,但是在“显示”设置界面,可以设置为左右的。

对于左右顺序:每一个屏幕的宽、高还是屏幕的宽高,只是其起始位置坐标不一样。第一个左上角:(0,0),第二个左上角(width1,0)【这里的 width1 是平屏幕1的宽】,后面以此类推。

对于上下顺序:每一个屏幕的宽、高还是屏幕的宽高,只是其起始位置坐标不一样。第一个左上角:(0,0),第二个左上角(0,height1)【这里的 height1是平屏幕1的高】,后面以此类推。

下面的是一个示例图:

知道了屏幕对应坐标的变化就可以上代码:

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
this.WindowState = WindowState.Normal;
this.WindowStyle = WindowStyle.None;
this.ResizeMode = ResizeMode.NoResize;
string appName = "Client";
int appCount = Process.GetProcessesByName(appName).ToList().Count;
int screenCount = Screen.AllScreens.Count();
if (appCount > screenCount)
{
this.Close();
}
else if (appCount == )
{
this.Left = ;
this.Top = ;
Width = Screen.AllScreens[].Bounds.Width;
Height = Screen.AllScreens[].Bounds.Height;
}
else
{
int leftPix = ;
for (int i = appCount - ; i >= ; i--)
{
leftPix += Screen.AllScreens[i].Bounds.Width;
}
this.Left = leftPix;
this.Top = ;
Width = Screen.AllScreens[appCount - ].Bounds.Width;
Height = Screen.AllScreens[appCount - ].Bounds.Height;
}
this.screenIndex = appCount - ; InitPlay();
}

上面的代码就是根据当前程序的个数,来分配屏幕。开了多个程序,感觉这样方式还不够好,应该一个程序进行分配。

三、开机自启动

开机自启动有几个方式:

1、在开机启动文件夹里面加入要开机启动的快捷方式即可;

2、修改注册表,添加要启动的程序到注册表;

这里用的是第二种方法。

        public static void AutoStart(bool isAuto)
{
try
{
if (isAuto == true)
{
RegistryKey R_local = Registry.LocalMachine; //RegistryKey R_local = Registry.CurrentUser;
RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
R_run.SetValue("应用名称", "程序地址/Client.exe");
R_run.Close();
R_local.Close();
}
else
{
RegistryKey R_local = Registry.LocalMachine;//RegistryKey R_local = Registry.CurrentUser;
RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
R_run.DeleteValue("应用名称", false);
R_run.Close();
R_local.Close();
} //GlobalVariant.Instance.UserConfig.AutoStart = isAuto;
}
catch (Exception)
{
System.Windows.MessageBox.Show("您需要管理员权限修改", "提示");
}
}

Windows 窗体的自适应分辨率、分屏显示、开机自启动的更多相关文章

  1. c# Winform 开发分屏显示应用程序

    分屏显示即可把一台主机内运行的多个程序分别显示在不同的两个(或多个)屏幕上.目前市面上主流的显卡都支持分屏显示(显示双屏幕),如果需要显示2个以上的屏幕,则应使用“拖机卡”类的硬件. 设置分屏显示的两 ...

  2. vim 分屏显示

    我用vim打开一个文件后,想同时打开另一个文件,就像windows中打开两个记事本一样,因此需要分屏显示 首先用vim打开一个文件 vim file1 输入命令[Esc] :sp file2 分屏打开 ...

  3. cat 显示文本、less 分屏显示文本、more 分页显示文件、head 显示文件的前面的内容、cut 切割、paste合并、wc用来对文本进行统计、sort排序、权限、关闭文件、vim的使用

    cat 显示文本  -E 显示结尾的$符 -n 对显示的每一行进行编号 -b 对非空行进行编号 -s 对连续的空行进行压缩 tac 倒序显示 less 分屏显示文本 向下翻一屏 空格 向下翻一行 回车 ...

  4. 转: Eclipse 分屏显示同一个文件

    Eclipse 分屏显示同一个文件   场景 : 某个类很大,可能有数千行.当你想要将类开头部分与中间或者靠后的部分进行对比时,请follow如下步骤: Window -> Editor -&g ...

  5. wpf 制作播放视频的屏保程序、而且能分屏显示

    这个程序用到了WPF里  “visual_Brush”(主要是为了实现分屏显示) , “UserControl” ,这两个知识点: 在屏保状态下播放指定文件夹下的视频,而且能分屏显示: 把编译好的屏保 ...

  6. c# 远程监控(4) 接收端 RTP包重组 分屏显示

    我们在上一期使用RTP协议,并进行了配置,打包了视频数据,这一期我们就对发送的数据进行重组,并显示在接受端上.最后对其进行扩展,支持多客户端视频发送,并在接收端分屏显示.完成远程监控的模拟. 先来个效 ...

  7. (转载)mysql分屏显示结果

    (转载)http://blog.csdn.net/wylkeke/article/details/7280645 linux机器: 在mysql命令行输入pager more就可以分屏显示结果了,取消 ...

  8. Eclipse 分屏显示同一个代码文件

    描述: 今天在使用Eclipse开发的时候不知按错哪个键,出现编辑框分屏显示同一个代码,由于之前没有使用过这一功能,所以就去查了一下,原来是Eclipse的分屏功能. 快捷键: 方式一:Window ...

  9. linux下信息分屏显示

    在字符界面下,经常遇到ls之后信息太长,只能看到最后一页的信息,这时就需要分屏显示了. 常用: ls | less 这样就可以分屏显示了,并可以用PgUp和PgDn来上下翻页. 也可以用: ls | ...

随机推荐

  1. AutoResetEvent 学生考试,老师阅卷,学生等待考试结果

    class Program { static void Main(string[] args) { )); t.Start(); Console.WriteLine("老师等待提交试卷&qu ...

  2. [神经网络与深度学习][计算机视觉]SSD编译时遇到了json_parser_read.hpp:257:264: error: ‘type name’ declared as function ret

    运行make之后出现如下错误: /usr/include/boost/property_tree/detail/json_parser_read.hpp:257:264: error: 'type n ...

  3. java内置的四大函数式接口

    一.Consumer:消费型接口(void accept(T t)) 举一个例子 public class LambdaTest { @Test public void test() { happyT ...

  4. Qt qml调试,qml性能分析和优化工具

    QML语言为qt推出的用于界面编程的语言. 1)如何在qt creator中进行调试qml: 以Qt Creator 4.6.2为例: 在qt creator的debug模式下,可以直接在qml中打断 ...

  5. QT_QML_常见问题

    1. qml文件中,如果要添加信号连接,如果与控件x有丁点关联,则将Connections{}最好放到该控件的{}内部,不这样做曾经遇到接受不到信号的奇葩问题. 2. 使用TabView时,在每个Ta ...

  6. 【剑指offer】面试题 20. 表示数值的字符串

    面试题 20. 表示数值的字符串

  7. 题解 P3957 【跳房子】

    对于这题有一个不用单调队列并且不是玄学设置区间最大值的做法 这题校内模拟考的时候打二分+枚举,结果写炸了,跑过来看题解发现为什么他们的区间最大值都是 $ 1005 $ ???特别懵,其实我的代码在dp ...

  8. 在bat批处理中简单的延时方法

    使用for命令: 延时1s左右的方法: @echo off echo %time% ,,) do echo %%i>nul echo %time% pause %time%是用来显示延时时间,实 ...

  9. Java集合对比

    1.array和ArrayList 的区别?1.1:ArrayList是Array的复杂版本1.2:数组不能扩容集合可以扩容1.3:存储的数据类型:Array只能存储相同数据类型的数据,而ArrayL ...

  10. ByteBuf源码

    ByteBuf是顶层的抽象类,定义了用于传输数据的ByteBuf需要的方法和属性. AbstractByteBuf 直接继承ByteBuf,一些公共属性和方法的公共逻辑会在这里定义.例如虽然不同性质的 ...